【问题标题】:Firebase deep queryingFirebase 深度查询
【发布时间】:2016-02-24 19:25:54
【问题描述】:

这个问题是关于实现 Firebase 深度查询的。考虑 firebase 中的以下结构:

在这里,我的 ref 指向结构的根,即 /messages。所以我有:

var ref = new Firebase("https://cofounder.firebaseio.com/messages");

我希望查询那些 ID 为 member = -752163252 的消息。所以基本上返回的对象应该是键为 655974744 的对象。我该如何在 firebase 中执行此操作?

这是我在控制台中尝试过的:

ref.orderByChild("members").equalTo(235642888).on('value', function(snap){console.log("Found ",snap.val())});

结果是:

VM837:2 Found  null

我感觉某处缺少链接。基本上,我想知道是否有任何方法可以在没有父键 id 的情况下查询深层嵌套数据(在本例中为 25487894,655974744)。

另外,如果我可以扩展我的问题,有没有办法添加一个监听器,当添加包含 member = -752163252 的新 messageId(在本例中为 25487894,655974744)时回调。

希望我的问题足够清楚。非常感谢任何帮助!

编辑:

我已经看过恐龙的例子,这就是我尝试过的方法,但没有成功。

【问题讨论】:

  • 您在问题中包含了 JSON 树的图片。请将其替换为作为文本的实际 JSON,您可以通过单击 Firebase 数据库中的“导出”按钮轻松获取该文本。将 JSON 作为文本使其可搜索,让我们可以轻松地使用它来测试您的实际数据并在我们的答案中使用它,一般来说这只是一件好事。
  • @FrankvanPuffelen 感谢您提及。对不起,我会记住的。

标签: javascript firebase firebase-realtime-database


【解决方案1】:

您的查询断言“成员”节点是一个值为235642888 的整数,但它自然不是。它是一个包含键列表的对象。

相反,您可能希望使用deep child query 语法和类似以下的内容:

ref.orderByChild("members/235642888").equalTo(235642888);

请注意,您实际上并不需要将键的值作为键本身。您可以通过将其设置为二进制 true1 来节省存储空间。查询将大致相同:

ref.orderByChild("members/235642888").equalTo(true);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多