Ios Firebase-索引在上。值不提供排序结果

Ios Firebase-索引在上。值不提供排序结果,ios,firebase,firebase-realtime-database,Ios,Firebase,Firebase Realtime Database,我的数据结构如下: { "inbox_events": { "from_users": { "uid1": { "uid2": 1501337181, "uid3": 1501337183, "uid4": 1501337179 }, "uid2" : { "uid6": 1501337284, "uid1

我的数据结构如下:

{
   "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
的条目仍按字母顺序排列,如果我执行
查询或删除的yValue
,则不会得到排序结果

我是否误读了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)")
})

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

这很容易忽略

结果被合并到一个快照中,当打印时,数据被转换成一个字典,从而放松了它的顺序

要保持正确的顺序,请迭代返回的快照

下面是转换后的快照的代码,然后是如何迭代快照以保持顺序

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

这很容易被忽视

结果被合并到一个快照中,当打印时,数据被转换成一个字典,从而放松了它的顺序

要保持正确的顺序,请迭代返回的快照

下面是转换后的快照的代码,然后是如何迭代快照以保持顺序

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

发布一些代码。另外,请指定您使用的平台(Android、iOS、Web、Admin SDK、REST API等等)@DimaRostopira:添加了我的意图,平台是由Frank Van P合法编辑的iOS。您正在尝试做什么还不清楚;您希望按值查询,但uid是键。此外,Firebase不提供降序选项,尽管有办法做到这一点。最后,.index并不直接影响项的排序方式,它是查询的性能增强。你能澄清一下预期的输出是什么吗?@Jay:当然,很抱歉。预期输出为:[“uid3”、“uid2”、“uid4”],因为1501337183>1501337181>1501337179。发布一些代码。另外,请指定您使用的平台(Android、iOS、Web、Admin SDK、REST API等等)@DimaRostopira:添加了我的意图,平台是由Frank Van P合法编辑的iOS。您正在尝试做什么还不清楚;您希望按值查询,但uid是键。此外,Firebase不提供降序选项,尽管有办法做到这一点。最后,.index并不直接影响项的排序方式,它是查询的性能增强。你能澄清一下预期的输出是什么吗?@Jay:当然,很抱歉。由于1501337183>1501337181>1501337179,预期输出为:[“uid3”、“uid2”、“uid4”]。