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

How to replace multiple documents in one DB call

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

r.table('my_table').replace(myArrayOfDocuments);

当我尝试这样做时,我收到一条错误消息:Inserted value must be an OBJECT (got ARRAY)

有什么想法吗?

如果您有一个要替换的对象列表,类似这样的操作应该可行:

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

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

您发布的查询不起作用的原因是 r.table('my_table').replace(...) 试图用您提供的参数替换 table 中的每一行 - 在这种情况下,一个数组而不是预期的字典。通常应该给r.table('my_table').replace(...)一个函数来根据旧行生成新行。有关详细信息或示例,请参阅 documentation for replace