假设我有以下MongoDB集合,并且我想查找ratings.by
为ijk
的所有文档,并将其评级更新为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
});
答案 0 :(得分:1)
使用 $
positional operator 标识数组中的元素,而不显式指定数组中元素的位置:
db.collection.update(
{ "ratings.by": "ijk" },
{ "$set": { "ratings.$.rating": 6 }},
{ "multi": true }
);