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”]。