我在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);
答案 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没什么关系。