You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase Firestore:使用set(merge:true)为何删除文档其他字段?

Firestore set({merge: true}) 覆盖文档字段的原因及解决办法

可能的原因

  • 目标文档ID错误
    若传入的house_id对应的文档不存在,set({merge: true})会创建一个仅包含residents字段的新文档。你可能误将这个新文档当成了原文档,以为原字段被删除。

  • Admin SDK版本bug
    部分旧版本的Firebase Admin SDK对merge参数的处理存在问题,导致合并逻辑未生效,执行了全量覆盖操作。

  • 存在前置修改操作
    如果在这段set代码执行前,有其他操作(比如无merge参数的set、删除字段的update)修改了原文档,删除了其他字段,那么执行后自然只剩residents字段。

解决方案

改用update操作(推荐)

update操作专门用于修改文档的指定字段,字段不存在时会自动创建,且不会影响文档中的其他字段,完全符合你的需求。修改后的代码如下:

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,
    }),
  });

其他排查步骤

  1. 验证house_id的取值是否正确,确保指向目标文档;
  2. 将Firebase Admin SDK升级到最新稳定版本,避免版本兼容问题。

内容的提问来源于stack exchange,提问作者Tsabary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 22:12:19