我的数据库结构是这样的:
{ "users": { "alovelace": { "name": "Ada Lovelace", "score": 4, }, "ghopper": { ... }, "eclarke": { ... } } }
我试图按降序检索前20个得分。
let queryRef = FIRDatabase.database().reference().child("users").queryOrderedByChild("score").queryLimitedToLast(20) queryRef.observeSingleEventOfType(.Value, withBlock: { (querySnapShot) in print(querySnapShot.value) })
我试图获得输出像
score": 4 score": 3 score": 2 or score": 2 score": 3 score": 4 or 2 3 4
请让我知道如何解决这个问题。
使用方法observeEventType代替observeSingleEventOfType。另外,将FIRDataEventType设置为ChildAdded。
observeEventType
observeSingleEventOfType
ChildAdded
最后,如果要使用前20个项目,请使用queryLimitedToFirst代替queryLimitedToLast。
queryLimitedToFirst
queryLimitedToLast
{ "users" : { "alovelace" : { "name" : "Ada Lovelace", "score" : 4 }, "eclarke" : { "name" : "Emily Clarke", "score" : 5 }, "ghopper" : { "name" : "Grace Hopper", "score" : 2 } } }
对于上面的数据集
let queryRef = FIRDatabase.database().reference().child("users").queryOrderedByChild("score").queryLimitedToFirst(20) queryRef.observeEventType(.ChildAdded, withBlock: { (snapshot) in print("key: \(snapshot.key), value: \(snapshot.value)") })
键:引子,值:可选({name = Grace Hopper; score = 2;}) 键:alovelace,值:可选({name = Ada Lovelace; score = 4;}) 键:eclarke,值:可选({name = Emily Clarke; score = 5;})
键:引子,值:可选({name = Grace Hopper; score = 2;})
键:alovelace,值:可选({name = Ada Lovelace; score = 4;})
键:eclarke,值:可选({name = Emily Clarke; score = 5;})
快照将以本机类型返回内容。返回的数据类型:
因此,您可以通过这种方式获得分数。
let queryRef = FIRDatabase.database().reference().child("users").queryOrderedByChild("score").queryLimitedToFirst(20) queryRef.observeEventType(.ChildAdded, withBlock: { (snapshot) in if let scores = snapshot.value as? NSDictionary { print(scores["score"]) } })
可选的(2) 可选的(4) 可选的(5)
可选的(2)
可选的(4)
可选的(5)
此外,实时数据库的默认值以 升序 返回所有内容。
如果要 降序排列 ,可以在数据库中进行一些 技巧 (4:40)。