2016-09-26 66 views
2

使用AngularFire2的角度应用程序。我试图在子对象上查询firebase,而不仅仅是一个子字符串属性。查询由子字符串属性工作,但我怎么能通过整个对象查询。通过子对象查询AngularFire2

此代码的工作

// Given the following firebase data structure 
    httpCache: { 
     {ID}: { 
      url: 'www.fakeurl', 
      otherProperties: {} 
     } 
    } 

    // This code will return results if exists where the url matches 
    this.af.database.list('httpCache', { 
     query: { 
      orderByChild: 'url', 
      equalTo: 'www.fakeurl' 
     } 
    }).subscribe(x => { 
     if (x.length > 0) { console.log('match found!'); } 
    }); 

此代码不起作用:

// Given the following firebase data structure 
    httpCache: { 
     {ID}: { 
      request: { 
       url: 'www.fakeurl', 
       params: 'id=1' 
      }, 
      otherProperties: {} 
     } 
    } 

    // This code throws an exception 
    let request = { 
     url: 'www.fakeurl', 
     params: 'id=1' 
    }; 
    this.af.database.list('httpCache', { 
     query: { 
      orderByChild: 'request', 
      equalTo: request 
     } 
    }).subscribe(x => { 
     if (x.length > 0) { console.log('match found!'); } 
    }); 

这里是个例外:

Query: First argument passed to startAt(), endAt(), or equalTo() cannot be an object. 

我试图使用此处显示的第二个解决方案过滤条件被推入包含所有过滤器属性的子对象中: Query based on multiple where clauses in firebase

+0

快速下方刺。如果你分享你的JSON片段(作为文本,没有截图),我可以匹配的代码。但是,这种方法将如我在下面描述的那样。 –

回答

0

您无法在对象上进行查询。因此,这是无效的,并导致该错误:

let request = { 
    url: 'www.fakeurl', 
    params: 'id=1' 
}; 
this.af.database.list('httpCache', { 
    query: { 
     orderByChild: 'request', 
     equalTo: request 
    } 
}) 

正如我在the question you linked回答,您可以添加包含您要查询的组合值的属性。但是,您还需要将实际查询调用中的值合并到一起,而不是您正在执行的操作。

这是不可能的说,你是如何结合的值,但说你只是会连接起来的URL和参数,可以你的查询:

let request = 'www.fakeurl_id=1' 
this.af.database.list('httpCache', { 
    query: { 
     orderByChild: 'request', 
     equalTo: request 
    } 
}) 
+0

我把我的标准放到一个连接的字符串字段中,它的工作原理是这样的,谢谢 –