更新数组中的嵌入式mongoose文档

时间:2015-02-19 23:29:48

标签: arrays mongoose document

假设我在书籍集中有以下文件:

{
  _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 }
     }
   }
)

2 个答案:

答案 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 }} 
);

$将保存匹配文档的位置