使用嵌套子对象中的键或字段查询firebase数据?

时间:2017-06-14 01:11:43

标签: javascript firebase firebase-realtime-database

我在firebase中的recipe数据 ![我在firebase中的recipe数据] [1]

我的receipe数据如下所示

receipe/1/12: "{"itemno":"1","receipeno":"12","receipedescript..."

如何过滤receipeno = 12或以receipeno = 12开头的所有食谱,而不考虑itemno?

我尝试了以下内容,但没有结果或错误? 还试过startAt

this.query = this.db.database.ref("receipe").orderByChild("receipeno").equalTo("12").limitToFirst(100);

BTW:this.query = this.db.database.ref("receipe")这将返回所有数据 并this.db.database.ref("receipe/1")返回itemno == 1的所有receipe。

我已将数据更新为不使用不透明字符串。 [更新了数据库,以便不使用不透明字符串] [2]

并尝试了以下内容。

this.query = this.db.database.ref("receipe").orderByChild("itemno").equalTo("1").limitToFirst(100);

this.query = this.db.database.ref("receipe").orderByChild("receipeno").equalTo("r1").limitToFirst(100);

1 个答案:

答案 0 :(得分:1)

Firebase无法帮助您进行深层查询。它在一个级别过滤和排序。因此,没有办法说,在recipeno下的任何节点下找到ID为(或recipes)为12的所有食谱。

如果你有一个级别,那么你会orderByKey().equalTo("12")。当然,这会限制您为每个ID一个食谱。

如果您要使用数字12的多个配方并且想要进行此类查询,则需要更改数据库结构 - 基本上摆脱当前具有{{1}键的中间级别},1等。在这种情况下,您很可能会使用2生成的自动生成的密钥,例如:

push

然后你可以说

+ recipes
  + autokey1: {itemno, recipeno, recipedescription}
  + autokey2: {itemno, recipeno, recipedescription}

当然,正如评论中所指出的那样,假设您将数据保存为对象,而不是字符串化的JSON,Firebase永远无法根据内容进行查询。

这是一个很好的案例研究,您应该提前仔细设计Firebase数据库结构,以便进行需要进行的查询。

顺便说一下,这个问题与Angular没什么关系。