【问题标题】:Update multiple documents by id set. Mongoose通过 id 集更新多个文档。猫鼬
【发布时间】:2013-12-04 12:02:01
【问题描述】:

我想知道 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;
        };
    });
};

我想知道的是,如果猫鼬可以做这样的事情:

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

其中 ids 是一个 id 数组,例如 ['id1', 'id2', 'id3'] - 样本数组。 查找同样的问题。

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    很可能是的。在mongodb查询中使用$in操作符调用更新。

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

    你只需要找到如何在 mongoose 中实现 $in。

    【讨论】:

    • 是的,你是对的,$in 运算符也非常适合猫鼬。
    • 我可以使用多重更新但使用保存命令吗?因为通过保存我也有验证
    • 是否可以为不同的 _id 值更新可见性属性?
    • 使用 {multi: true} 查询,您将能够为不同的 _id 值更新可见性属性@Vinay
    • 这对我有用,使用猫鼬。 ``` Product.update({store: {$in: [storeId]}}, {$set: {disabled: true}}).then(ret => { console.log(ret); }); ```
    【解决方案2】:

    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")
    
                            ]
                    }
            })
    

    【讨论】:

      【解决方案3】:

      更新与集合的指定过滤器匹配的所有文档。

      let ids = ["kwwe232244h3j44jg3h4", "23h2u32g2h3b3hbh", "fhfu3h4h34u35"];
      let visibility = true;
      
      Element.updateMany({_id: {$in: ids}}, 
         { $set: { visibility } }, 
         {multi: true} ,
         function(err, records){
             if (err) {
                 return false;
             }
      });
      

      know more

      【讨论】:

        猜你喜欢
        • 2020-10-18
        • 2018-09-08
        • 2011-10-05
        • 2020-06-27
        • 2018-08-20
        • 1970-01-01
        • 2017-05-26
        • 2016-05-24
        • 1970-01-01
        相关资源
        最近更新 更多