从[MongoDb关于更新的官方文档](http://docs.mongodb.org/manual/core/update/#Updating-The%24positionaloperator),我读到:
以下操作查询bios集合以查找_id字段等于6的第一个文档,并且awards数组包含一个子字段元素,其by字段等于ACM。如果找到,update()方法将更新第一个匹配的子文档中的by字段:
db.bios.update(
{ _id: 6, 'awards.by': 'ACM' } ,
{ $set: { 'awards.$.by': 'Association for Computing Machinery' } }
)
如果我需要另一个嵌套级别怎么办?也就是说,如果不是:
{ _id: 6, awards: [ { by: 'ACM', prize: 1000}, { by: 'ACS', prize: 2000} ] }
我有类似
的东西 { _id: 6, companies: [ { name: 'yyy', awards: [ { by: 'ACM', prize: 1000}, { by: 'ACS', prize: 2000 } ] } ] }
我想更新ID为6的公司,公司名称为'yyy',公司。$。奖励。$。by是'ACM'?这在MongoDB中甚至可能吗?
Merc的。
答案 0 :(得分:1)
答案 1 :(得分:1)
现在您可以使用$[]
运算符
db.coll.update({}, {$set: {"a.$[i].b.$[j].c": 5}}, {arrayFilters: [{"i.id": 1},{"j.c":1]});
Input: {a: [{id:1, b: [{c: 0},{c:1}]]}
Output: {a: [{id:1, b: {[c:0},{c:5}]]}
您将在arrayFilters
内指定所有必需的过滤器。