【发布时间】:2014-06-19 12:43:23
【问题描述】:
如果文档存在,如何进行 rethinkdb 原子更新,否则插入?
我想做类似的事情:
var tab = r.db('agflow').table('test');
r.expr([{id: 1, n: 0, x: 11}, {id: 2, n: 0, x: 12}]).forEach(function(row){
var _id = row('id');
return r.branch(
tab.get(_id).eq(null), // 1
tab.insert(row), // 2
tab.get(_id).update(function(row2){return {n: row2('n').add(row('n'))}}) // 3
)})
然而,这并不是完全原子的,因为在我们检查文档是否存在 (1) 和插入它 (2) 之间,其他线程可能会插入它。
如何使这个查询原子化?
【问题讨论】:
标签: rethinkdb