通过Firebase中的密钥查找对象

时间:2016-06-25 12:33:14

标签: javascript firebase firebase-realtime-database

我在我的应用程序中使用以下数据结构:

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

如何使用存储在用户对话阵列中的密钥监控所有会话?

1 个答案:

答案 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);
 });