假设我在书籍集中有以下文件:
{
_id:0 ,
item: "TBD",
stock: 0,
info: { publisher: "1111", pages: 430 },
tags: [ "technology", "computer" ],
ratings: [ { _id:id1, by: "ijk", rating: 4 }, {_id:id2 by: "lmn", rating: 5 } ],
reorder: false
}
我想更新ratings[k].rating
的值,我所知道的是集合的id和数组评级中存在的对象的_id。
mongoDB的教程有以下示例,它使用数组中对象的位置,但我想如果更新只能通过知道位置来完成,这意味着我首先必须找到位置,然后继续随着更新?我可以只用一个电话进行更新,如果可以,我该怎么做?
db.books.update(
{ _id: 1 },
{
$inc: { stock: 5 },
$set: {
item: "ABC123",
"info.publisher": "2222",
tags: [ "software" ],
"ratings.1": { by: "xyz", rating: 3 }
}
}
)
答案 0 :(得分:1)
对不起,迟到的回答;我认为这是你想要用mongoose
做的。
Books.findOneAndUpdate({
_id: 1,
'ratings._id': id1
},
{
$set: {
'ratings.$.rating' : 3
}
}, function(err, book){
// Response
});
答案 1 :(得分:0)
Positional operator可以帮助您:
db.books.update(
// find book by `book_id` with `rating_id` specified
{ "_id": book_id, "ratings._id": rating_id },
// set new `value` for that rating
{ $set: { 'ratings.$.rating': value }}
);
$将保存匹配文档的位置。