【问题标题】:Firebase order by child returning results that do not have the childFirebase order by child 返回没有孩子的结果
【发布时间】:2017-04-12 15:14:57
【问题描述】:

我有一个类似于以下用于直接消息聊天的 firebase 数据结构:

{
  "dms" : {
    "meta" : {
      "1-2" : {
        "lastMessage" : "Inadvertently",
        "lastMessageFrom" : 5,
        "lastMessageKey" : "-KhUHUqK9WfUJcjs2fQ-",
        "timestamp" : 1491952336485,
        "users" : {
          "uid-1" : {
            "lastMessageRead" : {
              "key" : "-KhStVBVIfRGepiWt6cn"
            }
          },
          "uid-2" : {
            "lastMessageRead" : {
              "key" : "-KhSrksAgg_2TqmcLjsz"
            }
          }
        }
      }
    }
  }
}

如果用户 id 是1,我只想检索存在users.uid-1 的节点。在 Swift 中,我认为这看起来像:

FIRDatabase.database().reference().child("dms").child("meta").queryOrdered(byChild: "users/uid-3").observe(.value, with: { (snapshot) in
            if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] {
...

但这会返回每个dms 节点。例如,我在上面查询uid-3,但它会返回我提供的数据结构示例中的节点。我做错了什么?

【问题讨论】:

  • 您是否尝试过为观察者再添加一个子级别? ...child("users").queryOrdered(byChild:"uid-3").observe...
  • @Prientus 这不会给我结果中的用户节点吗?我需要从1-2 开始的节点作为键,所以我得到lastMessage... 元数据。 “用户”也不是“元”的孩子,所以我不确定它是如何工作的。

标签: swift firebase firebase-realtime-database


【解决方案1】:

我最终将我的结构更改为:

{
  "meta" : {
    "1-2" : {
      "lastMessage" : "Dude....",
      "lastMessageFrom" : 2,
      "lastMessageKey" : "-KhXpXDn7et6mgFJRkWb",
      "timestamp" : 1492011852859,
      "users" : {
        "uid-1" : true,
        "uid-2" : true
      },
      "users-meta" : {
        "uid-2" : {
          "lastMessageRead" : {
            "key" : "-KhXpXDn7et6mgFJRkWb"
          }
        }
      }
    }
  }
}

我的查询要求子值等于 true。我猜在他们的文档中,当他们解释如何首先对 null 值进行排序时,他们的意思是 null 还是缺失?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2015-05-05
    • 2013-10-31
    • 1970-01-01
    相关资源
    最近更新 更多