Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 从firestore的集合中获取多个特定数据的最佳方式是什么?_Firebase_Google Cloud Firestore_Google Cloud Functions - Fatal编程技术网

Firebase 从firestore的集合中获取多个特定数据的最佳方式是什么?

Firebase 从firestore的集合中获取多个特定数据的最佳方式是什么?,firebase,google-cloud-firestore,google-cloud-functions,Firebase,Google Cloud Firestore,Google Cloud Functions,有没有更好的方法从firestore中的收集中获取多个特定数据? 让我们假设拥有这个集合: --Feeds (collection) --feedA (doc) --comments (collection) --commentA (doc) users_in_conversation: [abcdefg, hijklmn, ...] //Field contains list of all user in conversation 然后,我需要从用户集

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

--Feeds (collection)
  --feedA (doc)
    --comments (collection)
      --commentA (doc)
        users_in_conversation: [abcdefg, hijklmn, ...] //Field contains list of all user in conversation
然后,我需要从用户集合中检索用户数据(姓名和头像),目前,我对每个用户进行了1次查询,但当有很多人在对话时,查询速度会很慢。 检索特定用户的最佳方式是什么


谢谢

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

减少加载额外文档需求的一种常见方法是复制数据。例如,如果在每个评论文档中存储用户的姓名和头像,则无需每次阅读评论时都查看用户配置文件

如果您有关系数据库的背景,那么这种数据复制可能是非常意外的。但实际上,它在NoSQL数据库中非常常见


当然,你必须考虑如何处理用户配置文件的更新,我建议阅读FiBASE的其他数据库,同样的概念适用于FialBasic。我通常也建议观看。

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

  • 当用户发表评论时,在包含提要/帖子id的
    user
    文档中写入一个名为
    discussions
    的数组字段
  • 当用户加载提要/帖子时,获取在用户讨论中具有id的所有用户数据(使用
    数组包含

  • 它效率高,交易过程成本低。

    它会很慢-什么是“慢”?对话中有10000000人吗?哪一部分慢。您是否有一些代码可以共享,这是'慢'?用一些细节更新问题,我们来看看。同时,请花点时间回顾一下您好,谢谢您的解决方案。尝试过它并在客户端运行良好,但在重命名具有多条消息的用户时成本非常高。我建议对其进行一些简单的计算:1)预期的重命名操作数,2)预期的读取操作数。在我看到的几乎所有情况下,复制数据的成本都比额外读取的成本低得多。如果我的答案有用,请单击向上投票按钮(▲) 如果它回答了您的问题,请单击复选标记(✓) 接受它。这样别人就会知道你已经得到了(足够的)帮助。也请参见