我有个问题,知道何时向Firebase Firestore数据库添加或更新条目。
使用doc_ref.set
将添加一个文档(如果该文档不存在)。如果已经存在并调用set,它将覆盖所有文档字段。
如果文档存在,使用doc_ref.update
将更新文档的字段。如果文档不存在,则什么也不会发生。
如果该字段当前不存在,如何将新字段添加到文档中;如果该字段存在,则如何更新该字段?我可以读取数据库并检查该字段是否存在,然后使用set
或update
,但是肯定有更简单的方法吗?
答案 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.arrayUnion、FieldValue.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,
});
}
}