我在 Firebase 中使用 Javascript,我想查询存在于第二级或第三级的值,我的数据库是这样的:
Users :
-KNwBd5cF6iY9dWh0eFd :
name: "Jon Snow"
phones:
phone1: "0123456789"
phone2: "0123456987"
我想查询 phone1
值,我现在使用 orderByChild
查询数据库,我的代码是:
var ref = firebase.database().ref("users");
ref.orderByChild("name").equalTo("Jon Snow").on("value", function(snapshot) {
console.log(snapshot.val());
});
但我只能用它来查询第一层值的值,而如何在第二层或第三层上进行另一个查询。
最佳答案
如果不知道电话 ID 并考虑您当前的数据库结构,这是不可能的。
一种解决方法是使用实际电话号码作为 /phones
中的键。
{
users:
userId:
phones:
0123456789: true
}
然后您将能够通过以下方式检索它:
ref.orderByChild("phones/"+phoneNumber).equalTo(true).once("value", function(snapshot) {
console.log(snapshot.val());
});
工作 jsFiddle 。
如果您有 phoneId
,这会很简单。
ref.orderByChild("phones/phone1").equalTo("0123456789").once("value", function(snapshot) {
console.log(snapshot.val());
});
既然你不这样做,它就变成了一个很好的例子,说明你不应该如何构建 noSQL 数据库。
noSQL 数据库非常灵活,其结构在很大程度上取决于您的应用程序。所以请记住。例如,如果搜索 phoneNumber
在您的应用程序中很重要,并且您希望在 /phones/phoneNumber/
中包含更多数据,您应该考虑拥有一个新的单独分支以比你现在更专注的方式处理这件事。
关于javascript - 第二级/第三级的 firebase 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38677057/