Firebase Cloud Firestore创建条目或更新(如果已存在)

时间:2019-10-18 14:15:48

标签: firebase google-cloud-firestore

我有个问题,知道何时向Firebase Firestore数据库添加或更新条目。

使用doc_ref.set将添加一个文档(如果该文档不存在)。如果已经存在并调用set,它将覆盖所有文档字段。

如果文档存在,使用doc_ref.update将更新文档的字段。如果文档不存在,则什么也不会发生。

如果该字段当前不存在,如何将新字段添加到文档中;如果该字段存在,则如何更新该字段?我可以读取数据库并检查该字段是否存在,然后使用setupdate,但是肯定有更简单的方法吗?

2 个答案:

答案 0 :(得分:2)

您要查找的是merge操作中的set选项。来自setting a document上的文档:

var cityRef = db.collection('cities').doc('BJ');

var setWithMerge = cityRef.set({
    capital: true
}, { merge: true });
     

如果不确定文档是否存在,请传递选项以将新数据与任何现有文档合并以避免覆盖整个文档。

答案 1 :(得分:0)

我遇到了类似的问题,但我想使用 FieldValue.arrayUnionFieldValue.arrayRemove 更新数组字段。因此无法使用 set/merge。

为了避免在更新前检查文档是否存在(读取成本为 1),我用 try/catch 包装了更新语句并检查错误代码 5(未找到)。在这种情况下,设置值而不是更新。 代码示例:

  try {
    await docRef.update({
      arrayField: admin.firestore.FieldValue.arrayUnion(...dates),
    });
  } catch (error) {
    if (error.code === 5) {
      // Error: 5 NOT_FOUND: no entity to update:
      await docRef.set({
        arrayField: dates,
      });
    }
  }