首页 > 解决方案 > 更新猫鼬中的许多嵌套对象

问题描述

有没有办法一次更新猫鼬中的许多嵌套对象?我可以像这样更新一个嵌套对象:

    Model.findOneAndUpdate(
    {name : watchlistName , "mentions.id" : 123},
    {
        $set : {
            "mentions.$.tone" : positive,
            "mentions.$.verified" : true
        }
    }, function (err) {
        if(err) {
            console.log(err);
        }
    }
    );

但是如果我说要更新 200 个 id,我应该如何进行?

标签: javascriptmongodbmongoose

解决方案


您可以为此使用模型的更新方法。

Model.update(
    {name : watchlistName , "mentions.id": { $in: [1, 2, 3, 4, 5] }},
    {
        $set : {
            "mentions.$.tone" : positive,
            "mentions.$.verified" : true
        }
    }, function (err) {
        if(err) {
            console.log(err);
        }
    }
);

如果您需要使用不同的值更新它们,我建议您这样做:

const docs = await Model.find({name : watchlistName , "mentions.id": { $in: [1, 2, 3, 4, 5] }}).exec();

docs.forEach((doc) => {
  doc.mentions.$.tone = '[docValue]';
});

await Promise.all(docs.map(async doc => await doc.save()));
// All docs are updated now

推荐阅读