【问题标题】:Using set to only update a subset of write properties in a Firestore transaction使用 set 仅更新 Firestore 事务中的一部分写入属性
【发布时间】:2020-10-07 09:07:30
【问题描述】:

是否可以使用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

【问题讨论】:

    标签: node.js firebase google-cloud-firestore firebase-admin


    【解决方案1】:

    似乎您的transaction 必须首先使用get() 读取文档以创建或更新,然后决定将什么传递给set(),以确保文档包含正确的字段。单个set() 无法为您做出此决定。所以,类似:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-16
      • 2022-01-05
      • 1970-01-01
      • 2019-07-06
      • 1970-01-01
      • 1970-01-01
      • 2018-04-26
      • 2023-03-31
      相关资源
      最近更新 更多