Firebase深度查询

时间:2016-02-24 19:25:55

标签: javascript firebase firebase-realtime-database

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

enter image description here

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

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

我希望查询具有member = -752163252的消息ID。所以返回的对象基本上应该是带有键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)时回调的侦听器。

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

编辑:

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

2 个答案:

答案 0 :(得分:9)

您的查询断言"成员" node是一个值为235642888的整数,当然不是。{它是一个包含键列表的对象。

相反,您可能希望使用deep child query语法,如下所示:

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

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

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

答案 1 :(得分:-1)

问题在于您的数据结构而不是您的查询。你不希望你的关键和价值是一回事。发生的事情是你正在搜索成员= XXX罚款,但成员是一个成员[xxx] = xxx的字典。您应该在成员中存储一个数组,然后搜索members.value是否包含您要查找的成员。