Wie macht man ein rethinkdb atomares Update, wenn das Dokument existiert, ansonsten einfügt?
Ich möchte etwas wie:
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
)})
Allerdings ist dies nicht vollständig atomar, da zwischen dem Zeitpunkt, an dem überprüft wird, ob das Dokument existiert (1), und dem Einfügen (2) ein anderer Thread es einfügen könnte.
Wie macht man diese Abfrage atomar?