Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 这个mongoDB操作是否可以更有效?_Node.js_Mongodb - Fatal编程技术网

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同意,我尝试了这个解决方案,但它没有解决所述的问题。