使用merge:true创建Firestore新文档时触发错误问题排查
问题分析:Firebase set方法merge:true触发错误的原因
核心问题
当文档不存在时,传入空对象{}并设置merge: true调用set方法,尽管文档被成功创建,但仍触发了catch块中的错误。
原因解析
- Firebase的
set方法搭配merge: true时,需要至少有一个字段可以写入或合并。传入空对象{}时,没有任何字段可供处理,尽管系统会生成一个空文档,但这种操作在部分SDK版本中会被判定为无效写入,进而抛出错误。 - 官方文档中提到
merge: true允许创建新文档,但隐含前提是你提供了至少一个要写入的字段,空对象不符合该条件。
解决方案
- 避免传入空对象:至少提供一个字段(哪怕是占位字段),确保
set方法有可处理的内容。 - 直接创建空文档:如果确实需要空文档,去掉
merge: true参数直接调用set({}),或者使用create({})方法(需确认SDK版本支持)。
修正后的代码示例
方案一:提供占位字段
var someJson = { placeholder: true }; // 至少包含一个字段 db.collection('someCollection').doc(docId).set( someJson, {merge: true} ).then( (result) => { console.log("文档创建/更新成功"); }).catch ( (error) => { console.error("错误信息:", error); });
方案二:直接创建空文档
// 不使用merge参数创建空文档 db.collection('someCollection').doc(docId).set({}) .then( (result) => { console.log("空文档创建成功"); }).catch ( (error) => { console.error("错误信息:", error); });
内容的提问来源于stack exchange,提问作者aknoefel
相关产品推荐
相关产品推荐

