我知道rethinkDB 的 insert()有一个 upsert 选项。例如,来自文档:
rethinkdb.table('marvel').insert(
{ superhero: 'Iron Man', superpower: 'Arc Reactor' },
{upsert: true, return_vals: true}
).run(conn, callback)
但是说可能存在{superhero: 'Iron Man'}
不正确或过时的超级大国的现有记录,我想插入{ superhero: 'Iron Man', superpower: 'Arc Reactor' }
或更新任何现有{superhero: 'Iron Man'}
记录?
简而言之:我怎样才能 upsert 以便只有在特定字段匹配时才更新现有记录?
编辑:似乎这是用 .replace() 完成的:
如果您对不在表中的键进行点替换,则可以插入新文档
我不确定“点替换”是什么意思——但我认为它只是意味着替换。
var latestDoc = { superhero: 'Iron Man', superpower: 'Arc Reactor' }
var mergeOrCreate = function(existingDoc) {
if ( existingDoc ) {
return existingDoc.merge(latestDoc)
} else {
return latestDoc
}
}
rethinkdb.table('marvel')
.filter({ superhero: 'Iron Man'})
.replace(mergeOrCreate),
).run(conn, callback)
然而在测试中,“mergeOrCreate”函数被赋予另一个函数,而不是一个实际的文档或游标,作为参数。