我想在更新失败时插入新文档 - 有没有办法做到这一点?现在,RethinkDB只允许我通过插入命令中的{upsert:true}更新插入失败的文档。
答案 0 :(得分:4)
您可以将replace
与分支和显式合并一起使用。
replace
与update
类似,不过它完全替换文档而不是与文档合并。以下是等效的(在Ruby代码中):
table.get(id).update{|row| {a: row['a']+1}}
table.get(id).replace{|row| row.merge({a: row['a']+1})}
因此,如果您想进行“更新”,或者如果没有行则插入一行,您可以这样做:
table.get(id).replace {|row|
r.branch(
row.eq(nil),
INSERT_OBJECT,
row.merge(UPDATE_OBJECT))
}