首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复杂数据库结构的Firebase .indexOn

复杂数据库结构的Firebase .indexOn
EN

Stack Overflow用户
提问于 2016-11-01 03:49:04
回答 1查看 1.5K关注 0票数 1

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

但是,我需要在users/之后的用户id是动态的。我添加了一个链接到下面的另一个帖子,它尝试了类似的东西,但我似乎无法理解。所有的帮助都将不胜感激!

注意:上面的控制台输出用户id与下面的屏幕截图不匹配,但对于解决我认为的问题并不重要。如果我错了就纠正我。谢谢!

下面是Firebase中my的结构:

代码语言:javascript
复制
{
  "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查询:

代码语言:javascript
复制
FIRDatabase.database().reference().child("conversations")
  .queryOrderedByChild("users/\(AppState.sharedInstance.uid!)").queryEqualToValue(true)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-01 04:06:22

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

代码语言:javascript
复制
{
  "rules": {
    "users": {
      ".indexOn": ["kxSWLGDxpYgNQNFd3Q5WdoC9XFk2", "SjZLsTGckoc7ZsyGV3mmwc022J93", "mcOK5wVZoZYlFZZICXWYr3H81az2"]
    }
  }
}

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

不幸的是,没有API来生成索引。

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

代码语言:javascript
复制
conversationsByUser {
    "SjZLsTGckoc7ZsyGV3mmwc022J93": {
        "-KS3Y9dMLXfs3FE4nlm7": true
    },
    "mcOK5wVZoZYlFZZICXWYr3H81az2": {
        "-KS3Y9dMLXfs3FE4nlm7": true
    }
}

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40353896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档