按id集合更新多个文档。Mongoose

46

我想知道mongoose是否有一些方法可以通过id集合来更新多个文档。 例如:

for (var i = 0, l = ids.length; i < l; i++) {
    Element.update({'_id': ids[i]}, {'visibility': visibility} ,function(err, records){
        if (err) {
            return false;
        } else {
            return true;
        };
    });
};

我想知道的是,mongoose是否能像这样做:

Element.update({'_id': ids}, {'visibility': visibility}, {multi: true} ,function(err, records){
    if (err) {
        return false;
    }
});

其中ids是一个id数组,例如 ['id1','id2','id3'] - 示例数组。 find的问题也相同。

3个回答

92

很有可能是的。在 MongoDB 查询中,使用$in操作符进行更新。

db.Element.update(
   { _id: { $in: ['id1', 'id2', 'id3'] } },
   { $set: { visibility : yourvisibility } },
   {multi: true}
)

你需要做的就是找到如何在mongoose中实现$in。


2
是的,你说得对,$in 运算符在 mongoose 中也完美运作。 - Yaroslav Basovskyy
我可以使用多重更新和保存命令吗?因为我还需要进行验证。 - Barno
10
能否针对不同的 _id 值单独更新可见性属性? - Vinay
6
使用 {multi: true} 查询,您将能够针对不同的 _id 值以不同的方式更新可见性属性。@Vinay - Santhoshkumar
这对我有用,使用mongoose。Product.update({store: {$in: [storeId]}}, {$set: {disabled: true}}).then(ret => { console.log(ret); }); - sunapi386
显示剩余2条评论

19

updateMany函数中,不需要使用{ multi: true }参数。

db.collectionName.updateMany(
    {
        _id:
            {
                $in:
                    [
                        ObjectId("your object id"),
                        ObjectId("your object id")

                    ]
            }
    },
    {
        $inc: { quantity: 100 }

    })

我想再补充一点,你可以使用$in来获取多个文档

 db.collectionName.find(
        {
            _id:
                {
                    $in:
                        [
                            ObjectId("your object id"),
                            ObjectId("your object id")

                        ]
                }
        })

1
更新集合中与指定筛选条件匹配的所有文档。
let ids = ["kwwe232244h3j44jg3h4", "23h2u32g2h3b3hbh", "fhfu3h4h34u35"];
let visibility = true;

Element.updateMany({_id: {$in: ids}}, 
   { $set: { visibility } }, 
   {multi: true} ,
   function(err, records){
       if (err) {
           return false;
       }
});

了解更多


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接