Swift Firebase按子项排序返回没有子项的结果

Swift Firebase按子项排序返回没有子项的结果,swift,firebase,firebase-realtime-database,Swift,Firebase,Firebase Realtime Database,我有一个firebase数据结构,用于直接消息聊天,如下所示: { "dms" : { "meta" : { "1-2" : { "lastMessage" : "Inadvertently", "lastMessageFrom" : 5, "lastMessageKey" : "-KhUHUqK9WfUJcjs2fQ-", "timestamp" : 1491952336485, "user

我有一个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
的节点。在斯威夫特,我认为这看起来像:

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
,但它将返回我提供的数据结构示例中的节点。我做错了什么?

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

{
  "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。我猜在他们的文档中,当他们解释如何首先排序空值时,他们的意思是空值或缺少空值?

您是否尝试过向观察者添加一个子级别
…child(“用户”)。查询排序(byChild:“uid-3”)。观察…
@Prientus这不会给我结果中的用户节点吗?我需要从
1-2开始的节点作为键,以便获得
lastMessage…
元数据。而且“用户”不是“meta”的后代,所以我不确定这将如何工作。