说我有以下结构:
{
"-InSwU2yHOEHwhP_m4_n" : {
".priority" : 0.0,
"name" : "abc"
},
"-InSw_P0j8A-0Njj0Uvf" : {
".priority" : 1.0,
"name" : "def"
}
}
Run Code Online (Sandbox Code Playgroud)
我想添加另一个类似的项目,其中guid作为键,优先级等于当前呈现的项目数(在本例中为2).结果应如下所示:
{
"-InSwU2yHOEHwhP_m4_n" : {
".priority" : 0.0,
"name" : "abc"
},
"-InSw_P0j8A-0Njj0Uvf" : {
".priority" : 1.0,
"name" : "def"
},
"-InSxV-RVkZ07_f3uDnJ" : {
".priority" : 2.0,
"name" : "ghi"
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,由于多个客户端可能会尝试同时添加此类项目,因此这必须是一个事务.
有任何想法吗?
当你使用push(),每个项目都会被分配一个唯一的 ID。因此不需要进行交易(不会发生冲突)。
如果您希望记录的优先级是唯一的(这看起来像您想要实现的目标),我认为您应该简单地使用优先级作为 ID。
然后您可以使用事务来确保两个客户端不会同时推送:
FB.child(path).transaction(function(current_val) {
if( current_val === null ) {
/* set the value here */
}
/* do nothing; transaction fails because it was already written */
}, function(success) {
/* transaction done */
});
Run Code Online (Sandbox Code Playgroud)
但是,如果您使用优先级作为唯一 ID,则可能需要重新考虑这一点;这确实是 ID 的工作,而且做得很好;记录也按照插入的顺序进行维护,因此在大多数情况下不需要计数器。
| 归档时间: |
|
| 查看次数: |
1715 次 |
| 最近记录: |