【发布时间】:2013-12-11 12:07:17
【问题描述】:
我知道rethinkDB's 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'} 记录? p>
简而言之:我怎样才能 upsert 以便仅在匹配特定字段时更新现有记录?
编辑:似乎这是用 .replace() 完成的:
这里是the important bit from the replace() docs:
如果您对键进行点替换,则可以插入新文档 不在表格中
我不确定“点替换”是什么意思 - 但我认为它只是意味着替换。
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”函数被赋予了另一个函数,而不是实际的文档或游标,作为参数。
【问题讨论】:
标签: javascript node.js rethinkdb