Firestore update all documents in collections

后端 未结 4 742
执笔经年
执笔经年 2020-11-29 11:04

I have a firestore collections named users, each users have a generated id with a field score :

users 
    0e8X3VFL56rHBxxgkYOW
        score : 4
    3SeDjr         


        
相关标签:
4条回答
  • 2020-11-29 11:46

    For some strange reason the accepted answer ( thehamzarocks ) wasn't working for me, none of the documents were updated. Maybe there's a bug in AngularFire2. Anyway, I decided to loop over the docs array of the QuerySnapshot instead of using its forEach method, and add each update to a batch queue. Batching bulk operations is also more efficient than sending a new update request for each update operation.

    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))
    }
    
    0 讨论(0)
  • 2020-11-29 11:46

    Batch updates are nice but bare in mind that they are limited to 500 document updates per transaction. If this reset isn't done often maybe simplest approach is:

    async function resetScores() {
      const collection = await db
        .collection("users")
        .get()
      collection.forEach(doc=> {
        doc.ref
          .update({
            score: 0
          })
      })
    }
    
    0 讨论(0)
  • 2020-11-29 11:50

    You can get all the documents in the collection, get their id's and perform updates using those id's:

    db.collection("cities").get().then(function(querySnapshot) {
        querySnapshot.forEach(function(doc) {
            doc.ref.update({
                capital: true
            });
        });
    });
    
    0 讨论(0)
  • 2020-11-29 12:05

    Firestore doesn't have the ability to bulk update documents without knowing their IDs. You will have to somehow know the document ID of each document to update (perform a query, or do batches of queries), and update each one individually.

    0 讨论(0)
提交回复
热议问题