如何向Firebase RTDB添加对象并让新增条目占据索引0且不覆盖原有数据
解决方案
首先你之前操作出现数据库覆盖,是因为直接使用set()方法写入items根路径,该操作会直接替换路径下的全部内容,只要避免直接全量覆盖该节点即可实现需求,无需手动修改JSON重新上传,可采用以下两种方案:
方案1:事务操作(推荐,支持多并发场景无冲突)
该方案通过原子操作读写数组,不会出现并发写入覆盖的问题,在Retool中操作步骤如下:
- 新建Firebase RTDB查询,操作类型选择事务,目标路径填写你存储
items数组的完整路径(例如/xxx/items) - 在事务处理函数中写入如下逻辑:
// currentData为当前RTDB中存储的items数组内容 if (currentData) { // 将新对象插入数组首位(索引0位置) currentData.unshift({item: "你的新条目值"}) } else { // 若items节点不存在则初始化 currentData = [{item: "你的新条目值"}] } return currentData
- 执行查询即可完成新增,每次运行都会自动将新条目放在数组首位。
方案2:读写分两步(适合单用户低并发场景)
如果不需要处理多用户同时写入的情况,可以用更简单的两步操作:
- 第一步:新建查询读取
items节点的现有数组内容,存储到Retool变量中(示例变量名existingItems) - 第二步:新建
update类型的Firebase查询,目标路径同items路径,写入内容为[{item: "你的新条目值"}, ...existingItems]
注意这里必须使用
update()方法,不要使用set()方法,否则依然会出现覆盖问题。
内容的提问来源于stack exchange,提问作者Nova Nova
相关产品推荐
相关产品推荐

