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

Arrays 更新数组中的嵌入式mongoose文档,arrays,mongoose,document,Arrays,Mongoose,Document,假设我的藏书中有以下文档: { _id:0, 项目:“待定”, 股票:0, 信息:{出版商:“1111”,第430页}, 标签:[“技术”、“计算机”], 评级:[{u id:id1,by:“ijk”,评级:4},{u id:id2,by:“lmn”,评级:5}], 重新排序:false } 我想更新ratings[k].rating的值,我只知道集合的id和数组ratings中存在的对象的_id mongoDB教程中有一个使用数组中对象位置的示例,但我假设如果只能通过知道位置来完成更新,这意

假设我的藏书中有以下文档:

{
_id:0,
项目:“待定”,
股票:0,
信息:{出版商:“1111”,第430页},
标签:[“技术”、“计算机”],
评级:[{u id:id1,by:“ijk”,评级:4},{u id:id2,by:“lmn”,评级:5}],
重新排序:false
}
我想更新
ratings[k].rating的值,我只知道集合的id和数组ratings中存在的对象的_id

mongoDB教程中有一个使用数组中对象位置的示例,但我假设如果只能通过知道位置来完成更新,这意味着我必须首先找到位置,然后继续更新?我可以只用一个电话进行更新吗?如果可以,我怎么做

db.books.update(
{u id:1},
{
$inc:{股票:5},
$set:{
项目:“ABC123”,
“info.publisher”:“2222”,
标签:[“软件”],
“评级1”:{由:“xyz”,评级:3}
}
}
)
可能会帮助您:

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

将保存匹配文档的位置。

抱歉回答晚了;我想这就是你想用猫鼬做的事

Books.findOneAndUpdate({
        _id: 1,
        'ratings._id': id1
    },
    {
        $set: {
            'ratings.$.rating' : 3
        }
    }, function(err, book){
        // Response
    });

你的意思是你知道
\u id
\u id
内部
评级的值吗?您希望更新评级内部的评级。对吗?这就是我的意思。。。我尝试了不同的方法,但没有一种方法实际更新我想要的属性评级的值。我得到以下错误(代码16837):[MongoError:无法使用零件(评级的评级._id)遍历元素((评级:[Obj1],[Obj2]))