Firebase - .value上的索引未提供排序结果

时间:2017-07-30 10:34:57

标签: ios firebase firebase-realtime-database

我有这样的数据结构:

{
   "inbox_events": {
      "from_users": {
         "uid1": {
            "uid2": 1501337181,
            "uid3": 1501337183,
            "uid4": 1501337179
         },
         "uid2" : {
            "uid6": 1501337284,
            "uid1": 1501337295
         }
      }
   }
}

遵守以下规则:

{
   "rules": {
      ".read": "auth != null",
      ".write": "auth != null",
      "inbox_events": {
         "from_users": {
            "$userId": {
               ".indexOn": ".value"
            }
         }
      }
   }
}

问题:我不明白为什么值的索引不起作用。在firebase控制台中,每个$userId的条目仍按字母顺序排序,如果我执行queryOrderedByValue,则表示我没有得到排序结果。

我是否误读了Firebase文档?

提前致谢!

修改

具体来说,我试图像这样查询数据:

let queryRef = Database.database().reference().child("inbox_events").child("from_users").child("uid1").queryOrderedByValue()
queryRef.observe(.value, with: { (snapshot) in
    print("key: \(snapshot.key), value: \(snapshot.value)")
})

为了获得uid节点uid1 s的降序值的排序列表。

1 个答案:

答案 0 :(得分:3)

这很容易被忽视。

结果合并为一个快照,打印时,数据将转换为字典,从而使其失去顺序。

要维护正确的顺序,请迭代返回的快照。

这是使用转换后的快照的代码,然后是如何迭代快照以维护顺序

let queryRef = self.ref.child("inbox_events").child("from_users").child("uid1").queryOrderedByValue()
queryRef.observe(.value, with: { (snapshot) in

    //converts to dict
    print("key: \(snapshot.key), value: \(snapshot.value)")

    //keeps the order
    for child in snapshot.children {
        let snap = child as! DataSnapshot
        print("key: \(snap.key), value: \(snap.value)")
    }
})