【问题标题】:Look up an object by the key in Firebase在 Firebase 中通过键查找对象
【发布时间】:2016-06-25 22:40:17
【问题描述】:

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

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

如何使用存储在用户对话数组中的密钥监控所有对话?

【问题讨论】:

  • 我不太明白这个问题。您是否在循环访问用户的对话 ID 和加载每个对话时遇到问题?

标签: javascript firebase firebase-realtime-database


【解决方案1】:

快速“回答”为什么您的第一个 sn-p 不起作用:

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

【讨论】:

  • 问题是ref(..).child(conversation_id).on('child_added' 返回会话对象中的每个键/值对。我需要听阵列中的所有对话。有没有办法让child_added 返回整个conversation 对象?例如,使用childconsole.log(snapshot.val()) 打印出tom 然后bob 而不是{ user_one: 'tom', user_two: 'bob' }
  • 我不想听所有的对话,因为那样我会得到关于其他用户对话的数据,所以必须有一种方法来只获取 ID 为 @987654331 的对话@ Tl;dr,我想要一个 child_add 用于整个对话,而不仅仅是对话的 KVP。
  • .on('value',...?
猜你喜欢
  • 2018-09-02
  • 2016-07-04
  • 2018-01-30
  • 1970-01-01
  • 1970-01-01
  • 2017-05-10
  • 2023-03-27
  • 2016-07-15
  • 1970-01-01
相关资源
最近更新 更多