2015-06-05 54 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 } 
); 
相關問題