Firebase无法存入同一数组求助:需避免生成新键存入同一数组
Firebase 数据存入同一数组解决方案
你当前的问题是使用push()方法时,Firebase会在mensagem节点下生成随机键(比如-NGWqzRmWl8H4C6FEJ5L),导致新数据无法存入同一个user数组。要解决这个问题,需要直接操作user数组节点,而不是在父节点用push。
解决方案1:直接读取并追加(低并发场景适用)
先读取当前user数组的内容,追加新元素后再写回数据库:
const db = firebase.database(); // 直接定位到user数组的引用 const userArrayRef = db.ref('mensagem/user'); userArrayRef.once('value').then(snapshot => { // 如果数组不存在,初始化空数组 let currentUsers = snapshot.val() || []; // 追加新元素 currentUsers.push('lety'); // 将更新后的数组写回数据库 userArrayRef.set(currentUsers); });
解决方案2:事务写入(高并发场景推荐)
如果存在多用户同时写入的情况,直接读写可能导致数据覆盖,用事务可以保证操作的原子性:
const userArrayRef = db.ref('mensagem/user'); userArrayRef.transaction(currentUsers => { // 数组不存在时,直接创建包含新元素的数组 if (!currentUsers) { return ['lety']; } // 追加新元素 currentUsers.push('lety'); return currentUsers; });
关键注意点
- 避免在
mensagem节点上调用push(),这会生成新的随机键,分散你的数据。 - Firebase Realtime Database中的数组本质是带数字索引的对象,使用
set()传入数组时,会自动维护0、1、2...的索引。 - 高并发场景下必须用事务,否则多个用户同时追加元素时,会有数据丢失的风险。
内容的提问来源于stack exchange,提问作者ygor giovanni
相关产品推荐
相关产品推荐

