更新猫鼬中的许多嵌套对象

时间:2018-10-13 14:56:45

标签: javascript mongodb mongoose

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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