Node.js 这个mongoDB操作是否可以更有效?
我有一个收藏,看起来像:Node.js 这个mongoDB操作是否可以更有效?,node.js,mongodb,Node.js,Mongodb,我有一个收藏,看起来像: [ { 'job': builder, 'name': bob }, { 'job': doctor, 'name': bob }, { 'job': builder, 'name': james }, { 'job': lawyer, 'name': james }, ... ] 我还有一个数组,其中job总是相同的,如: [ { 'job': build
[
{
'job': builder,
'name': bob
},
{
'job': doctor,
'name': bob
},
{
'job': builder,
'name': james
},
{
'job': lawyer,
'name': james
},
...
]
我还有一个数组,其中job总是相同的,如:
[
{
'job': builder,
'name': jack
},
{
'job': builder,
'name': john
},
...
]
我想替换集合中作业为生成器的所有对象。为此,我目前使用两个单独的查询
mycollection.remove({'job': builder})
mycollection.insert(new_job_array);
有没有办法将此合并到一个查询中?您可以使用
update
命令
mycollection.update({'job':'builder'},{newdocument},{multi:true})
这里有更多信息:最终的结果是,没有一个操作可以做到这一点。需要两个步骤,它应该真正使用回调
mycollection.remove({'job': builder}, function(err){
if ( err ) handle();
else mycollection.insert(new_job_array);
});
你想用什么来代替它们?所有文档的具体一致更改?@wiredparie我想用新数组替换所有文档。这个例子可能不合逻辑,但其目的是创建一组全新的数据。好吧——它们需要作为不同的步骤来完成。考虑到您正在进行的更改的性质,将其作为一个操作并没有什么特别的好处(除了避免第二次网络请求,这在总体方案中是整个过程中的“噪音”)。它是一个繁忙的表,因此其好处是可以防止其他进程在表为空时(在删除之后和插入完成之前)命中该表。虽然这永远不会被完全阻止,但我认为它可以通过一个查询而不是一个查询来减少。而且做一次手术更干净。但是,hey ho,2就是这样。如果第二个参数不包含更新运算符(例如
$inc
),则无法更新多个文档。所以,如上所述,它不起作用。@WiredPairie同意,我尝试了这个解决方案,但它没有解决所述的问题。