Exo*_*Kid 0 android firebase firebase-realtime-database
继续像这样的similliar问题,我只想得到答案,如果这是一个限制FirebaseDatabase.updateChildren或如果我做错了.
我知道我无法为/ USER指定更新,然后为/ USER/+ getUid()+"/"+"fancy"+"/"+ pushKey指定不同的更新
如果我仍然需要这两个更新是原子的,我该怎么办?
childUpdates.put(USER + "/" + getUid(), map1);
childUpdates.put(USER + "/" + getUid() + "/" + "fancy" + "/" + pushKey, map2);
// Do a deep-path update
ref.updateChildren(childUpdates, new DatabaseReference.CompletionLi....
Run Code Online (Sandbox Code Playgroud)
更新添加说明:
值是字符串,
这是map1
//
// FAN_OUT - User.LAST_VISITED_ADDRESS
//
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("last_visited_address", "pushKey");
Run Code Online (Sandbox Code Playgroud)
这是map2
//
// FAN_OUT - User.FANCY
//
Map<String, Object> map2 = new HashMap();
map2.put("owner", "a path");
Run Code Online (Sandbox Code Playgroud)
运行多位置更新语句时,Firebase数据库会在您提供的地图上循环.对于每个条目,它使用您提供的值更新位置/键.未指定条目的执行顺序.
这意味着如果您有两个冲突的键/路径,则不确定结果是什么.例如
/path/to/object { name: "Erik Hellberg" }
/path/to/object/id 6820170
Run Code Online (Sandbox Code Playgroud)
如果服务器按照我上面的顺序执行操作,结果将是:
path
to
object
id : 6820170
name: "Erik Hellberg"
Run Code Online (Sandbox Code Playgroud)
但如果碰巧以相反的顺序执行它们,结果将是:
path
to
object
id : 6820170
Run Code Online (Sandbox Code Playgroud)
由于不确定操作非常无用,因此数据库拒绝更新.
获得结果的确定性方法是:
/path/to/object { id: 6820170, name: "Erik Hellberg" }
Run Code Online (Sandbox Code Playgroud)
和:
/path/to/object/name "Erik Hellberg"
/path/to/object/id 6820170
Run Code Online (Sandbox Code Playgroud)
由于此处的更新路径没有重叠,因此没有冲突.
| 归档时间: |
|
| 查看次数: |
576 次 |
| 最近记录: |