2016-02-19 109 views
0

订购我在安全&规则选项是:火力地堡queryOrderedByChild叫不上名字的斯威夫特

{ 
"rules": { 
".read": true, 
".write": true, 
"groups": { 
    ".indexOn": "name" 
    } 
} 
} 

我的JSON结构是这样的:

{ 
"groups": { 
    "-KAti17inT7GbHEgbzzS": { 
     "author": "ruben", 
     "name": "C" 
    }, 
    "-KAti36BQGO8sRmfufkE": { 
     "author": "ruben", 
     "name": "D" 
    }, 
    "-KAti2CVAHtJllQm_m-W": { 
     "author": "ruben", 
     "name": "A" 
    } 
} 

正如你所看到的,它是没有按“名称”排序,因为它应该是。 我做错了什么?

回答

2

.indexOn.indexOn安全规则中的指令仅告诉数据库在name属性上创建一个索引。它不会自动重新排序数据。

另外:JSON对象中键的顺序是未定义的。

要按名称获取您的群组列表,您必须执行Firebase查询。从Firebase documentation on queries

let ref = Firebase(url:"https://dinosaur-facts.firebaseio.com/dinosaurs") 
ref.queryOrderedByChild("height").observeEventType(.ChildAdded, withBlock: { snapshot in 
    if let height = snapshot.value["height"] as? Double { 
     println("\(snapshot.key) was \(height) meters tall") 
    } 
}) 

如果你适应这个片段到你的数据结构,将打印以正确的顺序组。

+0

非常感谢Frank,我认为.indexOn使得当你添加一个新项目时,它会以有序的方式添加它。现在很清楚!我非常感激。顺便说一下,我提出了一个新问题,可否请您检查一下? – Ruben

+1

如果我的回答很有用,请点击左侧的向上箭头。如果它回答了您的问题,请点击旁边的复选标记接受它。这样,其他人也知道你已经得到了帮助,他们可以继续下一个问题。 –

相关问题