簡體   English   中英

如何在 Firestore 中使用批量寫入操作更新數組字段?

[英]How can I update an array field with a batch write operation in firestore?

在子集合中創建新文檔時,我一直在嘗試更新文檔中的一組地圖,但無法使其工作:

export const addTask = async (data, caseId) => {
  let batch = await db.batch();

  const caseRef = db.collection("cases").doc(caseId);
  const taskRef = caseRef.collection("tasks").doc();

  try {
    await batch.set(taskRef, data);
    await batch.set(caseRef, {
      tasks: db.FieldValue.arrayUnion(data),
    }, {merge:true});
  } catch (error) {
    console.log(error);
  }
  return batch.commit();
};

這些是問題:

  • 如果父文檔中已經存在數組字段並且只需要更新,則在第二個批處理調用中使用 batch.update。
  • FieldValue.arrayUnion 不是 firestore 客戶端實例上的方法。 使用全局firebase命名空間中的 firebase.firestore.FieldValue.arrayUnion 來更新數組。 查看更新 arrays的指南
  • {merge:true}不是必需的,因為 arrayUnion 會將數據添加到現有集合中,除非它已經存在。
    export const addTask = async (data, caseId) => {

      let batch = await db.batch();

      const caseRef = db.collection("cases").doc(caseId);
      const taskRef = caseRef.collection("tasks").doc();

      try {
        await batch.set(taskRef, data);
        await batch.update(caseRef, {
          tasks: firebase.firestore.FieldValue.arrayUnion(data),
        });
       }catch (error) {
        console.log(error);
       }
 
      return batch.commit();
     }

暫無
暫無

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

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