如何在Firestore中一次更新多个集合中的值?

Obed蒙萨尔维

我正在建立一个论坛Appin Vue,基本上是该网站的一个克隆...用户可以发布问题,获取这些问题的答案以及对这些答案的评论。我有一个分别用于问题,答案和评论的顶级集合,这些集合中的每个文档都有一个名为的字段photoURL,用于存储该问题/答案/评论作者的个人资料图片的网址。

现在,photoURL当用户更新个人资料图像时,我具有以下代码来更新三个集合中同一作者的每个文档中字段:

const QUESTIONS = db.collection("questions");
QUESTIONS.where("authorId", "==", this.user.data.id)
.get()
.then(snapshots => {
    if (snapshots.size > 0) {
        snapshots.forEach(questionItem => {
            QUESTIONS.doc(questionItem.id).update({
                photoURL: imgUrl
            });
        });
    }
});

const ANSWERS = db.collection("answers");
ANSWERS.where("authorId", "==", this.user.data.id)
.get()
.then(snapshots => {
    if (snapshots.size > 0) {
        snapshots.forEach(answerItem => {
            ANSWERS.doc(answerItem.id).update({
                photoURL: imgUrl
            });
        });
    }
});

const COMMENTS = db.collection("comments");
COMMENTS.where("authorId", "==", this.user.data.id)
.get()
.then(snapshots => {
    if (snapshots.size > 0) {
        snapshots.forEach(commentItem => {
            COMMENTS.doc(commentItem.id).update({
                photoURL: imgUrl
            });
        });
    }
});

目前可以使用,但是有一种方法可以一次执行这三个操作?还是一般而言实现这些更新的更好方法?我当时在考虑将从三个集合中检索到的所有id首先存储在一个数组中,然后进行更新,但是写入次数将保持不变,因此看起来并没有改善。

弗兰克·范普菲伦

我可以快速想到的两种方法:

  1. 减少重复代码的数量。
  2. 更改数据模型。

减少重复代码的数量

您可以创建一个辅助函数,该函数将集合作为参数进行更新:

function updateDocumentsInCollectionForAuthor(collection, author, update) {
  db.collection(collection).where("authorId", "==", author)
    .get()
    .then(snapshots => {
      snapshots.forEach(doc => {
        doc.ref.update(update);
      });
    });
}

正如Doug所说,您可以分批执行此操作,但性能差异可能不值得代码复杂度,如下所示:向Firestore写入大量文档的最快方法是什么?

然后,您可以调用它来更新每个集合:

updateDocumentsInCollectionForAuthor("questions", this.user.data.id, { photoURL: imgUrl });
updateDocumentsInCollectionForAuthor("answers", this.user.data.id, { photoURL: imgUrl });
updateDocumentsInCollectionForAuthor("comments", this.user.data.id, { photoURL: imgUrl });

更改数据模型

替代方法是更改​​数据模型,以将所有问题,答案和评论存储在同一集合中。实际上,这就是Stack Overflow的作用:所有这些项目都在一个表中,并用一个值来分开,该值指示该发布的类型。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在mysql中一次更新多个随机条目?

来自分类Dev

如何在Redis中一次获取多个键值的值?

来自分类Dev

如何在数组php中一次查找多个值

来自分类Dev

如何在Redis中一次获取多个键值的值?

来自分类Dev

如何在Rails中一次保存多个记录?

来自分类Dev

如何在RethinkDB中一次创建多个索引?

来自分类Dev

如何在JavaScript中一次分配多个变量?

来自分类Dev

如何在C中一次清除多个位?

来自分类Dev

如何在Java中一次打印多个列表?

来自分类Dev

如何在Rethinkdb中一次提取多个查询

来自分类Dev

如何在Actionscript中一次引用多个对象?

来自分类Dev

如何在 SpriteKit 中一次引用多个 SKNode?

来自分类Dev

如何在 react js 中一次更新嵌套对象中所有键的值?

来自分类Dev

如何在循环中一次显示值

来自分类Dev

如何在Xcode 7中一次删除多个集成?

来自分类Dev

如何在Microsoft Outlook 2013中一次接受多个会议邀请?

来自分类Dev

如何在Windows 10中一次性打开多个应用

来自分类Dev

如何在mongo collection中一次运行中查找,迭代和更新文档?

来自分类Dev

如何在 JavaScript 集合中搜索多个短语之间的第一次出现?

来自分类Dev

如何在一次粘贴中将多个值粘贴到多个表单输入中?

来自分类Dev

如何在SQL Server 2008中一次为多个表设置IDENTITY_INSERT ON

来自分类Dev

在Django中一次更新多个对象?

来自分类Dev

在Coldfusion中一次更新多个xml节点?

来自分类Dev

如何在一个目录中一次创建多个目录?

来自分类Dev

如何在多个csv文件中一次按行查找(并输出)第一个值1和最后一个值1的位置?

来自分类Dev

从Swift字典中一次提取多个键的值

来自分类Dev

在列表 r 中一次设置多个值

来自分类Dev

在R中一次替换多个列中的值的最简单方法

来自分类Dev

如何在Spark中一次对多个列进行聚合

Related 相关文章

  1. 1

    如何在mysql中一次更新多个随机条目?

  2. 2

    如何在Redis中一次获取多个键值的值?

  3. 3

    如何在数组php中一次查找多个值

  4. 4

    如何在Redis中一次获取多个键值的值?

  5. 5

    如何在Rails中一次保存多个记录?

  6. 6

    如何在RethinkDB中一次创建多个索引?

  7. 7

    如何在JavaScript中一次分配多个变量?

  8. 8

    如何在C中一次清除多个位?

  9. 9

    如何在Java中一次打印多个列表?

  10. 10

    如何在Rethinkdb中一次提取多个查询

  11. 11

    如何在Actionscript中一次引用多个对象?

  12. 12

    如何在 SpriteKit 中一次引用多个 SKNode?

  13. 13

    如何在 react js 中一次更新嵌套对象中所有键的值?

  14. 14

    如何在循环中一次显示值

  15. 15

    如何在Xcode 7中一次删除多个集成?

  16. 16

    如何在Microsoft Outlook 2013中一次接受多个会议邀请?

  17. 17

    如何在Windows 10中一次性打开多个应用

  18. 18

    如何在mongo collection中一次运行中查找,迭代和更新文档?

  19. 19

    如何在 JavaScript 集合中搜索多个短语之间的第一次出现?

  20. 20

    如何在一次粘贴中将多个值粘贴到多个表单输入中?

  21. 21

    如何在SQL Server 2008中一次为多个表设置IDENTITY_INSERT ON

  22. 22

    在Django中一次更新多个对象?

  23. 23

    在Coldfusion中一次更新多个xml节点?

  24. 24

    如何在一个目录中一次创建多个目录?

  25. 25

    如何在多个csv文件中一次按行查找(并输出)第一个值1和最后一个值1的位置?

  26. 26

    从Swift字典中一次提取多个键的值

  27. 27

    在列表 r 中一次设置多个值

  28. 28

    在R中一次替换多个列中的值的最简单方法

  29. 29

    如何在Spark中一次对多个列进行聚合

热门标签

归档