Firebase Realtime Database批量更新中如何将指定操作从set改为update?
问题原因
你当前使用的Firebase多路径批量更新规则为:updates对象的键是要操作的完整数据库路径,值是该路径最终要写入的内容。你将groups/${this.groupId}/addresses/${lead.id.toString()}作为键、赋值{address: lead.address}对象的写法,等价于直接给该ID节点执行set操作,会清空节点下原有的其他所有字段,只保留address字段。
解决方案
如果要实现该ID节点下仅更新address字段、不影响其他字段的效果,只需要把多路径更新的键精准写到具体要更新的字段层级即可,调整后的代码如下:
const updates = {}; //batch operation // 第一个操作保持不变,依然是覆盖整个leads下的对应ID节点 updates[`groups/${this.groupId}/leads/${lead.id.toString()}`] = { name: lead.name, address: lead.address, }; // 第二个操作修改为:键指定到具体的address字段路径,值直接填字段内容 updates[`groups/${this.groupId}/addresses/${lead.id.toString()}/address`] = lead.address; return this.angularFireDatabase.object('/').update(updates);
调整后依然保留批量更新的原子性,所有操作要么全部执行成功,要么全部不生效,不会出现部分数据写入的异常情况。
内容的提问来源于stack exchange,提问作者Sampath
相关产品推荐
相关产品推荐

