gpt4 book ai didi

swift - Firebase 规则中有关 indexOn 的恼人问题

转载 作者:行者123 更新时间:2023-11-30 10:44:50 25 4
gpt4 key购买 nike

我几乎阅读了所有 StackOverflow 答案,但没有一个适合我的场景,因为这是一个常见问题。在 Firebase 中查询数据时,我的 Xcode 控制台给出了非常常见的警告。该警告是使用未指定的索引。您的数据将在客户端下载并过滤。考虑将/users 处的 ".indexOn": "username"添加到安全规则中以获得更好的性能

我尝试的是首先阅读 Firebase 文档,准确了解我在做什么以及所述的其他答案,例如 Why does this Firebase ".indexOn" not work? 。下面,我提供了我的安全规则,完全按照消息提示进行操作;在/users 添加 indexOn 但没有成功。我还提供了我的数据库用户节点和下面的一个函数。

{
"rules": {
".read": true,
".write": true,
"users":{
".indexOn": "username"
}
}
}

我的 Firebase 数据库位于/users,采用 JSON 格式

    "users":{
"5LYUynelLTcL8Bg9WNWGXV34YIq2" {
"email": "user1@gmail.com"
"username": "user1"
}
"9srk307kzxOW7j6dNmMaac9eYPu2" {
"email": "user2@gmail.com"
"username": "user2"
}

我在 Swift 中使用的函数

let ref = Database.database().reference().child("users").queryOrdered(byChild: "username").queryEqual(toValue: passedInFriendString)
ref.observeSingleEvent(of: .value) { (snapshot) in
print(snapshot)
}

我不知道还能去哪里。如果能了解这是否是查询我想要的内容的正确格式,那就太棒了!

最佳答案

我解决了!

我没有意识到的是,我的问题中的上述代码在/users 上添加适当的索引定义后确实成功打印了快照。我的问题是意识到如果您想进一步访问我相应查询的用户名快照的数据,您需要循环遍历快照。看起来像这样

let ref = Database.database().reference().child("users").queryOrdered(byChild: "username").queryEqual(toValue: passedInFriendString)
ref.observeSingleEvent(of: .value) { (snapshot) in
for child in snapshot.children {
guard let snap = child as? DataSnapshot else {return}
if snap.hasChild("email") {
print("It has an email")
}
}
}

感谢上面的 Frank 指导我并确认我走在正确的道路上。每当我需要获取数据时,我很高兴能够学到一些新的并且非常高效的东西。

关于swift - Firebase 规则中有关 indexOn 的恼人问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55957680/

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