关注像this一样的similliar问题,如果这是FirebaseDatabase.updateChildren
中的限制或者我做错了,我只想得到答案。
我知道我无法为/ USER指定更新,然后为/ USER / + getUid()+" /"指定不同的更新。 +"幻想" +" /" + pushKey
如果我还需要这两个更新是原子的,我该怎么办?
childUpdates.put(USER + "/" + getUid(), map1);
childUpdates.put(USER + "/" + getUid() + "/" + "fancy" + "/" + pushKey, map2);
// Do a deep-path update
ref.updateChildren(childUpdates, new DatabaseReference.CompletionLi....
更新添加说明:
值是字符串
这是map1
//
// FAN_OUT - User.LAST_VISITED_ADDRESS
//
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("last_visited_address", "pushKey");
这是map2
//
// FAN_OUT - User.FANCY
//
Map<String, Object> map2 = new HashMap();
map2.put("owner", "a path");
答案 0 :(得分:5)
运行多位置更新语句时,Firebase数据库会循环显示您提供的地图。对于每个条目,它使用您提供的值更新位置/键。执行条目的顺序未指定。
这意味着如果您有两个冲突的键/路径,则不确定结果是什么。 E.g。
/path/to/object { name: "Erik Hellberg" }
/path/to/object/id 6820170
如果服务器按照我上面的顺序执行操作,结果将是:
path
to
object
id : 6820170
name: "Erik Hellberg"
但如果碰巧以相反的顺序执行它们,结果将是:
path
to
object
id : 6820170
由于不确定操作非常无用,因此数据库会拒绝更新。
获得结果的确定方法是:
/path/to/object { id: 6820170, name: "Erik Hellberg" }
并且:
/path/to/object/name "Erik Hellberg"
/path/to/object/id 6820170
由于此处的更新路径没有重叠,因此没有冲突。