Firestore调用add()新增文档时数组内嵌套对象不被接受问题求助
Firestore 写入嵌套对象数组失败排查方案
补充问题背景:写入普通字段一切正常,仅当数据中包含
sites: [{}]格式的嵌套对象数组时文档创建失败,所有待写入数据均有效非空。
问题相关截图:
常见排查及解决方法
- 校验嵌套对象的字段名合法性
Firestore 禁止字段名包含.、[、]、*、/、~等特殊字符,也不允许字段名以双下划线__开头,若sites数组内的对象存在不符合规则的字段名,会直接触发写入拦截。 - 检查数组内是否包含未序列化的特殊类型
若数组中放入了未实例化的Timestamp、无效的Reference引用类型、或者未转成普通对象的自定义类实例,都会导致写入失败。可先通过JSON.parse(JSON.stringify(待写入的sites数组))做临时序列化测试,如果序列化后可正常写入,就说明原数组中存在非法类型,提前处理对应类型即可。 - 核对安全规则的字段权限配置
你的安全规则可能仅放开了集合的顶级字段写入权限,未对sites嵌套字段做权限放行。可临时将对应集合的写入规则调整为allow write: if true;做测试,如果调整后可正常写入,重新调整安全规则补充sites字段的权限校验逻辑即可。 - 升级SDK到最新稳定版
部分旧版本的Firestore Web/Admin SDK存在嵌套数组写入的已知兼容性问题,升级到对应平台SDK的最新稳定版即可解决。
参考写入示例(JavaScript SDK)
import { addDoc, collection } from "firebase/firestore"; const submitData = { projectName: "测试项目", owner: "test_user", // 嵌套对象数组需保证所有元素为普通对象,字段名合法 sites: [ { siteName: "华南站点", location: "广东省广州市", status: 1 }, { siteName: "华东站点", location: "浙江省杭州市", status: 1 } ] } // 写入集合 await addDoc(collection(db, "你的集合名称"), submitData);
内容的提问来源于stack exchange,提问作者Leon Michalak
相关产品推荐
相关产品推荐


