javascript - 第二级/第三级的 firebase 查询

标签 javascript firebase firebase-realtime-database

我在 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/

相关文章:

javascript - 如何使用CSS3和JQuery实现轮播背景的缩放效果

javascript - 为文本文件中的每个项目添加引号

node.js - Firebase云函数多次执行

android - 我需要得到我的 firebase 数据库的最后一个 child

javascript - 使用 jQuery 设置 'font-size' 不适用于所选文本的最后一个元素

Javascript - 计算数组中的出现次数但不改变顺序

ios - Firebase 快照在请求用户名时返回 null

ios - childByAppendingPath 由于嵌入导航 Controller 而导致 Segues

swift - 根据搜索查询 [Firebase][Swift] 显示 firebase 信息

javascript - 火力基地。授予客户端直接写入服务器上数据库的访问权限是否安全?