javascript Firebase:为什么我的set(with merge:true)操作是否删除文档中的所有其他字段?

mbskvtky  于 2023-03-21  发布在  Java
关注(0)|答案(1)|浏览(84)

假设Firebase Firestore上的一个文档表示一个房屋

{
  id: "1234",
  owner: "John",
  address: "123 Something Ave.",
  residents: [],
}

我有一个云函数,应该将居民添加到房子中。另请注意:residents字段并不总是从一开始就存在。想法是在添加第一个resident时添加它。
这是我的操作,它是云函数的一部分:

db.collection("houses")
      .doc(house_id)
      .set(
        {
          residents: admin.firestore.FieldValue.arrayUnion({
            uid: context.auth.uid,
            first_name: driverData.first_name,
            last_name: driverData.last_name,
          }),
        },
        { merge: true }
      );

但是,该函数并没有使用数组创建这个字段,而是将所有其他数据保留在文档中,而是完全删除了所有其他数据,只剩下residents数组字段。
为什么会这样?

unhi4e5o

unhi4e5o1#

我理解差异的方式:

  • 带有mergeset将更新文档中的字段,如果字段不存在,则创建字段

update将更新字段,但如果文档不存在,则会失败
要只更新residents字段,可以使用update()方法而不是set()方法。

db.collection("houses")
  .doc(house_id)
  .update({
    residents: admin.firestore.FieldValue.arrayUnion({
      uid: context.auth.uid,
      first_name: driverData.first_name,
      last_name: driverData.last_name,
    }),
  });

相关问题