如何查询和过滤Firebase实时数据库

24
我希望您可以从数据库中获取所有名字和姓氏与用户输入匹配的人。
目前这是我的代码:
admin.database().ref('persons').orderByChild('Firstname').equalTo(firstName).limitToLast(1).once("value").then(function(snapshot) {
}

这段代码可以过滤名字的第一个单词,但我无法找到任何添加另一个Where条件来过滤姓氏的方法。我尝试添加另一个orderBy,但似乎没有起作用。难道实时数据库在进行简单查询时就必须如此困难吗?


Firebase实时数据库查询只能按单个属性排序/过滤。在许多情况下,可以将要过滤的值组合成一个单一的(合成)属性,例如“FirstName_LastName”:“Frank_van Puffelen”。有关此示例和其他方法,请参见我的答案:https://dev59.com/Yl8d5IYBdhLWcg3wiit9 - Frank van Puffelen
1个回答

21

简短的回答:你无法做到。长话短说:使用谷歌的新Firestore数据库或手动在客户端执行过滤。查看这个答案了解其他选项。


13
如果您能理解我的话,我想说实时数据库的制造者很糟糕!谢谢回答! - Mizlul
1
是的,您可以...通过自定义索引实现。https://dev59.com/Yl8d5IYBdhLWcg3wiit9 - charlietfl
1
这不是真的,如果你读了答案,它说你不能。indexOn只是一种在对任意子节点进行排序时提高读取性能的方法。 - SUPERCILEX
1
@SUPERCILEX 如果您向数据添加一个合成属性,您可以在实时数据库中完成与Firestore相同的用例。我完全赞成推荐Firestore,因为它通过为您管理复合索引使这变得更加容易,但是Charlie是正确的,即在多个值上进行过滤是可能的(至少在这种简单情况下)。 - Frank van Puffelen
哦,是的,忘了那个。不过,问题是在问如何添加另一个“equalTo”,这是不可能的。无论如何,感谢你指出来! - SUPERCILEX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接