Как сделать атомное обновление 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), какой-либо другой поток может вставить его.
Как сделать этот запрос атомарным?