0
我有类似这样Rethinkdb:在文档不同的按键冲突战略
{id: 0, a: [0, 1], b: null, c: 4, d: 6, e: 7}
{id: 0, a: [1,2], b: 3, c: 5, d: null, f:8}
我想批量插入文档文件,使a
被添加到阵列中为一组,空值将被覆盖,但其他值保持不变。因此,在表中所得到的文档将
{id:0, a:[0,1,2], b:3, c:4, d:6, e:7, f:8}
我想这样做在Data Explorer下面,但我得到的错误SyntaxError: Unexpected token return
r.table('foo').insert(
[{id: 0, a: [0, 1], b: null, c: 4, d: 6}, {id: 0, a: [1,2], b: 3, c: 5, d: null}],
{
conflict: function(id, old_doc, new_doc){
return (new_doc.keys().map(function (key) {
return r.branch(key.eq('a'),
[key, old_doc('a').setUnion(new_doc('a'))],
r.branch(old_doc(key).eq(null),
[key, new_doc(key)],
[key, old_doc(key)])
)
})).coerceTo('object')
}
})
我也想过用合并对于这种情况,但需要以便能够为相同的键定义冲突策略,并且看起来您可以在此处执行此操作issue #873。
编辑: 功能我结束后使用@mlucy答案和其他一些变化。
r.table('foo').insert(
[{id: 0, a: [0, 1], b: null, c: 4, d: 6, e: 7}, {id: 0, a: [1,2], b: 3, c: 5, d: null, f:8}],
{
conflict: function(id, old_doc, new_doc){
return (new_doc.keys().setUnion(old_doc.keys()).map(function (key) {
return r.branch(old_doc.hasFields(key).and(new_doc.hasFields(key).not()),
[key, old_doc(key)],
new_doc.hasFields(key).and(old_doc.hasFields(key).not()),
[key, new_doc(key)],
r.branch(key.eq('a'),
[key, old_doc('a').setUnion(new_doc('a'))],
r.branch(old_doc(key).eq(null).and(new_doc(key).eq(null).not()),
[key, new_doc(key)],
[key, old_doc(key)])
)
)
})).coerceTo('object')
}
})