首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Firestore更新集合中的所有文档

Firestore更新集合中的所有文档
EN

Stack Overflow用户
提问于 2018-07-23 22:27:28
回答 5查看 18.3K关注 0票数 23

我有一个名为users的firestore集合,每个用户都有一个生成的id和一个字段分数:

代码语言:javascript
复制
users 
    0e8X3VFL56rHBxxgkYOW
        score : 4
    3SeDjrgAWMmh3ranh2u
        score : 5

我使用redux-firestore并希望将所有用户的得分重置为0,如下所示

代码语言:javascript
复制
firestore.update({ collection: 'users' }, { score : 0 }

我无法做到这一点,因为更新方法需要一个文档id

你知道怎么做吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-07-24 01:32:33

您可以获取集合中的所有文档,获取它们的id并使用这些id执行更新:

代码语言:javascript
复制
db.collection("cities").get().then(function(querySnapshot) {
    querySnapshot.forEach(function(doc) {
        doc.ref.update({
            capital: true
        });
    });
});
票数 42
EN

Stack Overflow用户

发布于 2018-08-22 15:59:35

出于某种奇怪的原因,公认的答案( thehamzarocks )对我不起作用,所有文档都没有更新。也许AngularFire2中有个bug。无论如何,我决定循环遍历QuerySnapshot的docs数组,而不是使用它的forEach方法,并将每个更新添加到一个批处理队列中。批处理批量操作也比为每个更新操作发送新的更新请求更有效。

代码语言:javascript
复制
resetScore(): Promise<void> {
  return this.usersCollectionRef.ref.get().then(resp => {
    console.log(resp.docs)
    let batch = this.afs.firestore.batch();

    resp.docs.forEach(userDocRef => {
      batch.update(userDocRef.ref, {'score': 0, 'leadsWithSalesWin': 0, 'leadsReported': 0});
    })
    batch.commit().catch(err => console.error(err));
  }).catch(error => console.error(error))
}
票数 15
EN

Stack Overflow用户

发布于 2019-12-26 12:45:11

批量更新很好,但请记住,每个事务最多只能更新500个文档。如果这个重置不是经常做的,那么最简单的方法可能是:

代码语言:javascript
复制
async function resetScores() {
  const collection = await db
    .collection("users")
    .get()
  collection.forEach(doc=> {
    doc.ref
      .update({
        score: 0
      })
  })
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51481192

复制
相关文章

相似问题

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