【问题标题】:What is the best way to get multiple specific data from collections in firestore?从 Firestore 的集合中获取多个特定数据的最佳方法是什么?
【发布时间】:2021-05-02 09:46:55
【问题描述】:

有没有更好的方法从 firestore 的集合中获取多个特定数据? 假设有这个集合:

--Feeds (collection)
  --feedA (doc)
    --comments (collection)
      --commentA (doc)
        users_in_conversation: [abcdefg, hijklmn, ...] //Field contains list of all user in conversation

然后,我需要从 Users 集合中检索用户数据(姓名和头像),目前,我对每个用户进行了 1 次查询,但人多时会很慢在谈话中。 检索特定用户的最佳方式是什么?

谢谢!

【问题讨论】:

标签: firebase google-cloud-firestore google-cloud-functions


【解决方案1】:

检索附加名称实际上比大多数开发人员预期的要快得多,因为请求通常可以通过单个 HTTP/2 连接进行管道传输。但是,如果您注意到性能问题,请编辑您的问题以显示您使用的代码、您拥有的数据以及您获得的性能。

减少加载额外文档的常用方法是复制数据。例如,如果您将用户的姓名和头像存储在每个评论文档中,则每次阅读评论时都无需查找用户个人资料。

如果您来自关系数据库背景,这种数据重复可能会非常出乎意料。但它实际上在 NoSQL 数据库中很常见。

您当然必须考虑如何处理用户配置文件的更新,对此我建议您阅读:How to write denormalized data in Firebase 虽然这是针对 Firebase 的其他数据库,但同样的概念也适用于 Firebase。我也一般建议观看Getting to know Cloud Firestore

【讨论】:

  • 您好,感谢您的解决方案。尝试过并在客户端运行良好,但在重命名有很多消息的用户时成本很高。
【解决方案2】:

我尝试了一些解决方案,但我认为这个解决方案最适合这种情况:

  1. 当用户发表评论时,在包含提要/帖子 ID 的 user 文档中写入名为 discussions 的数组字段。
  2. 当用户加载提要/帖子时,获取在用户讨论中具有其 id 的所有用户数据(使用 array-contains

它高效且交易流程成本更低。

【讨论】:

    猜你喜欢
    • 2018-04-05
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    相关资源
    最近更新 更多