5

我想在更新失败时插入新文档 - 有什么办法吗?现在 RethinkDB 只允许我通过插入命令中的 {upsert: true} 在插入失败时更新文档。

4

1 回答 1

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))
}
于 2014-01-16T00:55:47.577 回答