gpt4 book ai didi

具有复杂数据库结构的 Firebase .indexOn

转载 作者:行者123 更新时间:2023-12-02 00:50:32 25 4
gpt4 key购买 nike

您在下面看到的当前查询效率不高,因为我没有设置正确的索引。我在 Xcode 的控制台中收到建议 Consider adding ".indexOn": "users/kxSWLGDxpYgNQNFd3Q5WdoC9XFk2"at/conversations。我已经尝试过了,它有效。

但是,我需要 users/ 之后的用户 ID 是动态的。我在下面的另一篇文章中添加了一个链接,该文章尝试了类似的操作,但我似乎无法理解。非常感谢所有帮助!

注意:上面的控制台输出用户id与下面的截图不符,但我认为解决问题无关紧要。如我错了请纠正我。谢谢!

这是我在 Firebase 中的数据库的结构:

{
"conversationsMessagesID" : "-KS3Y9dMLXfs3FE4nlm7",
"date" : "2016-10-19 15:45:32 PDT",
"dateAsDouble" : 4.6601793282986E8,
"displayNames" : [ “Tester 1”, “Tester 2” ],
"hideForUsers" : [ "SjZLsTGckoc7ZsyGV3mmwc022J93" ],
"readByUsers" : [ "mcOK5wVZoZYlFZZICXWYr3H81az2", "SjZLsTGckoc7ZsyGV3mmwc022J93" ],
"users" : {
"SjZLsTGckoc7ZsyGV3mmwc022J93" : true,
"mcOK5wVZoZYlFZZICXWYr3H81az2" : true
}
}

和 Swift 查询:

FIRDatabase.database().reference().child("conversations")
.queryOrderedByChild("users/\(AppState.sharedInstance.uid!)").queryEqualToValue(true)

其他帖子的链接: How to write .indexOn for dynamic keys in firebase?

最佳答案

添加请求的索引似乎相当简单:

{
"rules": {
"users": {
".indexOn": ["kxSWLGDxpYgNQNFd3Q5WdoC9XFk2", "SjZLsTGckoc7ZsyGV3mmwc022J93", "mcOK5wVZoZYlFZZICXWYr3H81az2"]
}
}
}

您更可能担心手动添加这些索引不可行,因为您是在代码中生成用户 ID。

很遗憾,没有用于生成索引的 API。

相反,您需要对数据进行不同的建模,以允许执行您想要执行的查询。在这种情况下,您想要检索特定用户的对话。因此,您需要为每个特定用户存储对话:

conversationsByUser {
"SjZLsTGckoc7ZsyGV3mmwc022J93": {
"-KS3Y9dMLXfs3FE4nlm7": true
},
"mcOK5wVZoZYlFZZICXWYr3H81az2": {
"-KS3Y9dMLXfs3FE4nlm7": true
}
}

多次存储此数据乍一看似乎效率低下,但在使用 NoSQL 数据库时这很常见。这与数据库自动为您生成索引没有什么不同,只是您必须自己编写代码来更新索引。

关于具有复杂数据库结构的 Firebase .indexOn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40353896/

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