在MongoDB中,如何查找和更新特定的数组元素?

时间:2015-06-05 05:23:27

标签: mongodb meteor

假设我有以下MongoDB集合,并且我想查找ratings.byijk的所有文档,并将其评级更新为6。

换句话说,将{ 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 个答案:

答案 0 :(得分:1)

使用 $ positional operator 标识数组中的元素,而不显式指定数组中元素的位置:

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