Firebase实时数据库插入数据覆盖节点,如何实现新增节点?
Firebase实时数据库插入新节点避免覆盖的解决方案
问题原因
你调用firebase.database().ref("transaction/0").set(...)时,set()方法会完全替换指定路径下的所有数据,导致原有transaction/0下的子节点被覆盖,只保留新设置的内容。
方案1:使用push()自动生成唯一子节点(推荐)
Firebase的push()方法会自动创建带唯一随机ID的子节点,无需手动管理序号,代码示例:
firebase.database().ref("transaction/0").push({ "Name": "ghi" });
执行后数据库结构:
transaction | |--0 | |--0 -- "Name":"abc" | |--1 -- "Name":"def" | |--[-Mxxxxxxx] -- "Name":"ghi" // 自动生成的唯一ID节点
方案2:手动生成连续数字序号
如果需要使用0、1、2这类连续数字作为子节点ID,可先获取当前子节点总数,再写入对应路径:
const ref = firebase.database().ref("transaction/0"); // 获取当前子节点数量,以此作为新节点的序号 ref.once("value").then(snapshot => { const newIndex = snapshot.numChildren(); ref.child(newIndex.toString()).set({ "Name": "ghi" }); });
执行后即可得到你预期的结构:
transaction | |--0 | |--0 -- "Name":"abc" | |--1 -- "Name":"def" | |--2 -- "Name":"ghi"
注意:多客户端同时写入时,手动计数可能引发序号冲突,这种场景更推荐方案1,或使用Firebase事务(transaction)机制保证序号唯一性。
内容的提问来源于stack exchange,提问作者user19984679
相关产品推荐
相关产品推荐

