Javascript 仅更新MongoDB中的某些子文档

Javascript 仅更新MongoDB中的某些子文档,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,给予这样的文件 { _id: '123456', items: [{ itemId: 'abcd', qty: 1 }, { itemId: 'defg', qty: 3 }] } 我只想更新某些项目;例如,我只想将itemId='abcd'的数量增加5,这样生成的文档将成为 { _id: '123456', items: [{ itemId: 'abcd', qty: 6 }, { itemI

给予这样的文件

{
  _id: '123456',
  items: [{
     itemId: 'abcd',
     qty: 1
  }, {
     itemId: 'defg',
     qty: 3 
  }]
}
我只想更新某些项目;例如,我只想将
itemId='abcd'
的数量增加
5
,这样生成的文档将成为

{
  _id: '123456',
  items: [{
     itemId: 'abcd',
     qty: 6
  }, {
     itemId: 'defg',
     qty: 3 
  }]
}

我该怎么做?

基本上有3个步骤:

 1. Select the itemid from items array where value is abcd
 2. use $inc property to increament
 3. Use $ operator(positional update) to specify that you want to 
从要更新的文档中增加数量键

PFB最终查询:

db.schools.update({ 
    items.itemId: 'abcd'
},{
    $inc : { items.$.qty : 5 }
});

mongo shell上的update命令应该可以工作:db.cols.update({“items.itemId”:“abcd”},{$set:{“items.$.qty”:5})。您需要使用$运算符来更新数组中的一个元素。可能是重复的,
$
运算符会更新每个子文档,但是你是说数据库足够聪明,可以只匹配匹配子文档的更新吗?是的,所以更新的第一个参数是查询,我们将使用它首先过滤掉文档,然后第二个参数将告诉我们在这些过滤的文档中更新什么..像$inc和$set这样的字段更新操作符不更新每个子文档,它们只修改指定的字段。是adi,它只修改特定字段。。不是整个文件。