#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
.