我在Rethink中有一系列现有文档。他们都有一个ID字段。我想要做的基本上是这个(在javascript中):
r.table('my_table').replace(myArrayOfDocuments);
当我尝试时,我收到错误消息:Inserted value must be an OBJECT (got ARRAY)
有什么想法吗?
答案 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
。