let*_*4be 5 atomicity rethinkdb
假设我有一份文件
{
id: 1,
fruits: []
}
Run Code Online (Sandbox Code Playgroud)
这里的水果充当了SET
现在我想原型地为一个带有主键= 1的文档的fruits数组添加一个值,或者如果它不存在则创建这样的文件(即使用引擎盖下的SetInsert ReQL)
我还需要做同样的增量(ReQL .Add)
显然,这不能在客户端代码中完成,因为它打破了原子性,最终导致数据不一致
我希望这样的事情成为可能
r.table('results').insert({
id: '62c70132-6516-4279-9803-8daf407ffa5c',
counter: r.row('counter').add(1).default(0)
}, {conflict: "update"})
Run Code Online (Sandbox Code Playgroud)
但它死于"RqlCompileError:r.row未在此上下文中定义"
任何帮助/指导表示赞赏,谢谢!
目前这是不可能insert的.另一个提到的解决方案不是原子的,因为它使用子查询.我们正在https://github.com/rethinkdb/rethinkdb/issues/3753上为此制定解决方案.
但是,您可以使用replace执行原子upsert:
r.table('results').get('62c70132-6516-4279-9803-8daf407ffa5c')
.replace({
id: '62c70132-6516-4279-9803-8daf407ffa5c',
counter: r.row('counter').add(1).default(0)
})
Run Code Online (Sandbox Code Playgroud)
replace 如果文档不存在,将实际执行插入.