使用 set 仅更新 Firestore 事务中的写入属性的子集

Using set to only update a subset of write properties in a Firestore transaction

是否可以使用 set(在事务的上下文中)创建包含某些对象的文档,但仅 更新 它具有属性的子集?

例如,我有一个用例,我想创建或更新一个文档,但在更新用例中,只有某些字段应该被合并。在下面的代码中,created 应该只写在文档创建时(而不是更新时)。

我在 SetOptions 中尝试了 mergeFields,我认为它只适用于更新情况,但似乎也适用于写入情况并导致 created创建文档时省略。

如果这是 SetOption 的预期行为,还有其他方法可以实现吗?

t.set(docRef, 
  {
    name: 'Alice',
    updated: admin.firestore.FieldValue.serverTimestamp(),
    created: admin.firestore.FieldValue.serverTimestamp(),
  },
  { mergeFields: ['name', 'updated'] });

Node.js 管理 SDK 9.2.0

您的 transaction will first have to read the document with get() 似乎需要创建或更新,然后决定将什么传递给 set() 以确保文档包含正确的字段。一个 set() 无法为您做出此决定。所以,像这样:

const snap = await t.get(docRef)
if (snap.exists) {
    t.update(docRef, ...)
}
else {
    t.create(docRef, ...)
}