2015-06-05 51 views
0

假设我有以下MongoDB的集合,我想找到他们ratings.byijk的所有文件,并更新其评级至6在MongoDB中,如何查找和更新特定的数组元素?

换句话说,更新{ by: "ijk", rating: 4 }{ by: "ijk", rating: 6 }。问题是我不知道这样的数组元素的索引。

{ 
    _id: 1, 
    item: "TBD", 
    stock: 0, 
    info: { publisher: "1111", pages: 430 }, 
    tags: [ "technology", "computer" ], 
    ratings: [ { by: "ijk", rating: 4 }, { by: "lmn", rating: 5 } ], 
    reorder: false 
} 

我的问题:我应该怎么写的db.collection.update()功能?这是我的失败尝试:

db.collection.update({ 
    ratings.by: { 
     $elemMatch: { 
      $eq: 'ijk' 
     } 
    } 
}, { 
    $set: { 
     // don't know which index to set. How should I modify this line? 
     ratings.rating: 6 
    } 
}, { 
    multi: true 
}); 

回答

1

使用$ positional operator标识在数组中的元素没有显式指定数组中元素的位置更新:

db.collection.update(
    { "ratings.by": "ijk" }, 
    { "$set": { "ratings.$.rating": 6 }}, 
    { "multi": true } 
); 
相关问题