Мангуст обновляет множество документов в базе данных с условием

#javascript #node.js #mongodb #mongoose

Вопрос:

Привет, мне нужна помощь , чтобы обновить многие документы в моей коллекции продуктов, они должны соответствовать updateData.oldCategoryName и updateData.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'
};
 

Как я могу установить условия и обновить множество документов с помощью мангуста? Заранее спасибо.

Это фрагмент кода, который я использую для обновления одного продукта:

     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});
    });
 

Ответ №1:

Используя мангуста, вы можете использовать updateMany() функцию.

Попробуйте выполнить этот запрос:

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

С помощью этого запроса вы сообщаете монго «Обновите все элементы, где userId требуется идентификатор пользователя и category желаемая категория. Затем установите все категории, соответствующие новому значению.

Пример здесь

Комментарии:

1. Спасибо! необходим ли вариант multi: true ? все работает нормально

2. Не используя мангуста, с помощью метода updateMany не требуется multi:true .