Mongoose更新子文档数组

我可以更新匹配我的更新查询数组中的所有子文档? 这里是收集元素的例子:

{ x: 1, myarray: [ { a: 1, b: 2, }, { a: 1, b: 4, } ] } 

然后我写这样的查询:

  MyModel.update({x: 1, myarray.a: 1}, {$set: {"myarray.$.b": 3} }, function(err) { }); 

它只更新myarray中的第一个子文档。 在文档中写道,这种查询只更新第一个文档。 我想知道是否有更新数组中所有匹配的子文档的方法。 提前致谢。

你现在不能和位置运营商做这件事,而且有一个JIRA 。 但是,一个工作是循环遍历每个匹配的文档,并在该文档内循环遍历数组,更新匹配的元素:

 db.collection.find({"x": 1, "myarray.a": 1}).forEach(function(doc) { doc.myarray.forEach(function(item){ if(item.a == 1){ item.b = 3; } }); db.collection.save(doc); });