如何在一次数据库调用中替换多个文档

hag*_*ggy 3 rethinkdb

我在Rethink中有一系列现有文档.他们都有一个ID字段.我想要做的基本上是这个(在javascript中):

r.table('my_table').replace(myArrayOfDocuments);
Run Code Online (Sandbox Code Playgroud)

当我尝试时,我得到一个错误说: Inserted value must be an OBJECT (got ARRAY)

有任何想法吗?

小智 8

如果你有一个要替换的对象列表,那么这样的东西应该有效:

r.expr(myArrayOfDocuments)
 .forEach(function(row) { return r.table('my_table').get(row('id'))
                                                    .replace(row); })
 .run(conn, callback);
Run Code Online (Sandbox Code Playgroud)

这假定您的主键是id,但如果您想要更通用的解决方案,您可以替换idr.table('my_table').info()('primary_key').

你发布的查询不起作用的原因r.table('my_table').replace(...)是试图用你给它的参数替换表中的每一行 - 在这种情况下,是一个数组而不是预期的dict.通常r.table('my_table').replace(...)应该给出一个基于旧行生成新行的函数.有关更多详细信息或示例,请参阅文档replace.