我一直在尝试根据Swift中的子节点值来获取父节点的值。我已经阅读了不同的答案并试图实施它们,但它们都没有用。
我的Firebase数据库的当前结构是:
- leaderboard
- 0
- score: 123
- name: "School #1"
- 1
- score: 14323
- name: "School #2"
我一直在尝试的代码是:
let query = Database.database().reference().child("leaderboard").queryOrdered(byChild: "name").queryEqual(toValue: self.userSchool)
query.observeSingleEvent(of: .value, with:
{ snapshot in
for child in snapshot.children
{
let snap = child as! DataSnapshot
let key = snap.key
print("School key is: " + key)
}
})
如果我注释掉.queryEqual(toValue:self.userSchool),代码会运行并返回每个键,但是如果我离开那个部分,则根本不会发生任何事情。
如果学校是学校#1,如何让.queryEqual部分返回0?
答案 0 :(得分:0)
您可以以易于构建查询的方式对数据进行非规范化。
与您已经拥有的数据结构一起,您将拥有另一个节点(即另一个数据结构),如:
- leaderboardBySchool
- School #1
- id: 0
- School #2
- id: 1
使用NoSQL数据库,您应该毫不犹豫地以这样的方式复制数据,使您的查询更容易(也更快)执行。
根据您的评论,您可以拥有类似的节点:
- leaderboardBySchool
-autogeneratedId1
- name: School #1
- id: 0
-autogeneratedId2
- name: School #2
- id: 1
并且仍然比只有一个节点更容易。
这样的东西会根据学校名称
给你一个idvar leaderboardBySchoolRef =firebase.database()
.ref('leaderboardBySchool')
.orderByChild('name')
.startAt('School2')
.limitToFirst(1);
leaderboardBySchoolRef.once('value').then(function (snaps) {
snaps.forEach(function(child) {
console.log(child.val().id)
});
});