如何在一个数据库调用中替换多个文档
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
。
我在 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
。