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

时间:2015-01-29 19:35:55

标签: rethinkdb

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

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分:8)

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

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(...)正试图用您给出的参数替换表中的每一行 - 在本例中是一个数组而不是预期的dict。通常应该为r.table('my_table').replace(...)提供一个函数来根据旧行生成新行。有关详细信息或示例,请参阅documentation for replace