我在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());
});
这是我的“架构”的图像
对于NoSQL来说,我显然是一个菜鸟。我确实理解SQL 感谢所有帮助
答案 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
}
当然,您可以根据自己的需要进行调整