【问题标题】:Mongoose update Many documents in DB with condition猫鼬更新数据库中的许多文档有条件
【发布时间】:2021-07-25 04:59:34
【问题描述】:

您好,我需要一些帮助来更新我的产品集合中的许多文档,它必须匹配updateData.oldCategoryNameupdateData.userId,然后设置所有匹配的产品并使用updateData.newCategoryName 更新类别名称。

let products = [
    {id: 1, name: 'Brasilian', category: 'cofee', userId: 9},
    {id: 2, name: 'Colombian', category: 'cofee', userId: 9},
    {id: 3, name: 'Apple', category: 'fruit', userId: 8},
    {id: 4, name: 'Strawberry', category: 'fruit', userId: 8},
    {id: 5, name: 'Banana', category: 'fruit', userId: 7}
];


let updateData = {
    userId: 8,
    oldCategoryName: 'fruit',
    newCategoryName: 'good fruit'
};

如何设置条件并使用 mongoose 更新许多文档?提前致谢。

这是我用来更新单个产品的 sn-p:

    Product.findByIdAndUpdate(productId, updateData, {new: true}, (err, productUpdated) => {
        if(err) return res.status(500).send({message: 'Error al actualizar'});
        if(!productUpdated) return res.status(404).send({message: 'No existe el producto'});
        return res.status(200).send({product: productUpdated});
    });

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    使用猫鼬你可以使用updateMany()函数。

    试试这个查询:

    Product.updateMany({
      userId:req.body.userId
      category: req.body.oldCategoryName
    },
    {
      $set:{
        category: req.body.newCategoryName
      }
    })
    

    通过此查询,您告诉 mongo“更新所有需要 userId 的元素 userId 和 category 是所需的类别。然后设置与新值匹配的所有类别。

    例如here

    【讨论】:

    • 谢谢!是否需要 multi: true 选项?它工作正常
    • 不使用猫鼬,不需要updateMany方法multi:true
    猜你喜欢
    • 2017-05-10
    • 2021-08-14
    • 1970-01-01
    • 2020-10-18
    • 2018-07-10
    • 2022-01-17
    • 2021-03-11
    • 2021-12-31
    • 2011-10-05
    相关资源
    最近更新 更多