RethinkDB:​​如何做真正的upsert - 在更新时插入新文件失败?

时间:2014-01-14 08:39:46

标签: rethinkdb

我想在更新失败时插入新文档 - 有没有办法做到这一点?现在,RethinkDB只允许我通过插入命令中的{upsert:true}更新插入失败的文档。

1 个答案:

答案 0 :(得分:4)

您可以将replace与分支和显式合并一起使用。

replaceupdate类似,不过它完全替换文档而不是与文档合并。以下是等效的(在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))
}