gpt4 book ai didi

swift - 根据已知的子值获取 Firebase 节点的父值?

转载 作者:行者123 更新时间:2023-11-30 11:39:14 26 4
gpt4 key购买 nike

我一直在尝试在 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),代码就会运行并返回每个键,但如果我保留该部分,则什么也不会发生。

如果学校是 School #1,如何使 .queryEqual 部分返回 0?

最佳答案

您可以以易于构建查询的方式对数据进行非规范化。

与您已有的数据结构一起,您将拥有另一个节点(即另一个数据结构),例如:

- leaderboardBySchool 
- School #1
- id: 0
- School #2
- id: 1

使用 NoSQL 数据库,您应该毫不犹豫地复制数据,以便您的查询更容易(也更快)执行。

<小时/>

在你的评论之后,你可以有一个像这样的节点:

- leaderboardBySchool
-autogeneratedId1
- name: School #1
- id: 0
-autogeneratedId2
- name: School #2
- id: 1

而且仍然比只有一个节点更容易。

<小时/>

类似的东西会根据学校名称为您提供 ID

var 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)
});
});

关于swift - 根据已知的子值获取 Firebase 节点的父值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49431009/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com