我在我的应用程序中使用以下数据结构:
var users = {
"tom": { conversations: ["fake-uuid-v4"] },
"bob": { conversations: ["fake-uuid-v4"] }
};
var conversations = {
"fake-uuid-v4": {
user_one: "tom",
user_two: "bob"
}
}
每个用户都有一组映射到会话的密钥,其中包含会话的数据,例如最后发送的消息,用户是否正在键入等等。问题是我很难查找会话。
这是我尝试过的,但它没有产生任何结果。 (注意:我现在在我的firebase应用程序中有这些确切的数据,所以这在技术上是一个可运行的例子)
var conversation_id = 'fake-uuid-v4';
firebase.database().ref('/conversations')
.startAt(conversation_id)
.endAt(conversation_id)
.on('child_added', function(snapshot, prevKey) {
if(snapshot.val()) console.log(snapshot);
});
但是,如果我将代码更改为
,则不会从数据库中提取任何内容firebase.database().ref('/conversations/'+conversation_id).on('child_added', function(snapshot, prevKey) {
});
然后打印出添加的对话的每个键/值,在这种情况下:
tom
bob
如何使用存储在用户对话阵列中的密钥监控所有会话?
答案 0 :(得分:1)
快速“回答”为什么您的第一个代码段不起作用:
var conversation_id = 'fake-uuid-v4';
firebase.database().ref('/conversations')
.startAt(conversation_id)
.endAt(conversation_id)
.on('child_added', function(snapshot, prevKey) {
if(snapshot.val()) console.log(snapshot);
});
您没有指定订单,这意味着数据可能按优先级排序。但是我建议不要使用这种方法,因为你正在建立一个查询,而你可以直接访问孩子(这将会更快):
var conversation_id = 'fake-uuid-v4';
firebase.database().ref('/conversations')
.child(conversation_id)
.on('child_added', function(snapshot, prevKey) {
if(snapshot.val()) console.log(snapshot);
});