如何在Firebase数据库中查询嵌套属性?

时间:2018-06-15 08:42:38

标签: firebase firebase-realtime-database

我在firebase中有一个noSql数据库。 我想得到userId为288的对象 我试过很多组合,但我无法弄清楚它是如何完成的。 到目前为止,这是我的代码:

var refTest= database.ref('conversation')
var query = refTest
                .orderByChild('messages');

    query.on('value', function(data) {

 var a = data.val();
 console.log(a.messages.userId);
console.log(data.val());


});

这是我的“架构”的图像

enter image description here

对于NoSQL来说,我显然是一个菜鸟。我确实理解SQL 感谢所有帮助

2 个答案:

答案 0 :(得分:1)

您可以对嵌套值进行排序/过滤,如下所示:

var refTest= database.ref('conversation')
var query = refTest.orderByChild('messages/userId').equalTo("288");

query.on('value', function(snapshot) {
  snapshot.forEach(function(child) {
    console.log(child.key);
    console.log(child.val());
  });
});

需要forEach,因为可能有多个子节点的messages/userId等于288

答案 1 :(得分:0)

名为“messages”的密钥在您的架构中没有意义。因为如果您希望在该对话下有另一条消息,那么您将无法使用相同的密钥名称添加它,也无法将其添加到“消息”下,因为它会覆盖另一条消息。我的建议是使用 push()方法添加新邮件。这样您就可以唯一地标识每条消息。

关于您的问题,解析您的架构的一种易于理解的方法是:您遍历每个对话的每条消息,以使用 userID 查找消息。

ActionLink

}

当然,您可以根据自己的需要进行调整