簡體   English   中英

從 Firebase 中的所有文檔中更新一個字段

[英]Update a field from all documents in Firebase

我對 Firebase 非常陌生,我不確定如何更新一個集合中所有文檔中的相同字段。

  return db.collection('collection').get().then((snapshot) => {
    return snapshot.forEach((doc) => {

      doc.update({'field': 1});
      
    });
  })
  .catch((err) => {
    console.log('Error getting documents', err);
  });

我在 firebase function 中運行此代碼。 沒有錯誤,但什么也沒有發生。 我在文檔中看不到有關此特定問題的任何內容。 有誰知道出了什么問題?

您需要將所有update()調用的結果返回給調用者,否則它無法知道所有異步操作何時完成:

  return db.collection('collection').get().then((snapshot) => {
    return Promise.all(snapshot.documents.map((doc) => {
      return doc.ref.update({'field': 1});
    }));
  });

變化:

  1. update() return promise 以便它可以冒泡到 Cloud Functions 容器。
  2. 使用map以便我們獲得一系列承諾。
  3. 然后使用Promise.all以便我們僅在所有更新完成后才完成(並因此終止 Cloud Function)。

這種方法為我做了這件事......不知道這是否是正確的方法(正如我所說的我是初學者)

exports.scheduledFunction2 = functions.pubsub.schedule('every 1 minutes').onRun((context) => {

    return db.collection("collection")
    .get()
    .then(querySnapshot => {
      if (!querySnapshot.empty) {
        for(let i =0;i<querySnapshot.size;i++){

          var queryDocumentSnapshotTest = querySnapshot.docs[i];
          

          queryDocumentSnapshotTest.ref.update({'counter':1});

        }
        
  
        return null;
  
      } else {
       // do nothing
       console.log("No document corresponding to the query!");
        return null;
      }
    });
  
  
   
  });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM