Tengo una colección llamada room que contiene una matriz de macetas llamada potArr . Mi habitación también tiene una propiedad llamada bote promedio que debe ser igual al promedio de los valores potAmount en potArr . Quiero actualizar constantemente el bote promedio.
Aquí está mi código:
const rooms = await roomModel.find({}); for (let room of rooms) { let sumOfPots = 0; room.potArr.forEach((pot) => { sumOfPots += pot.potAmount; }; await roomModel.update({_id : room._id}, {$set : {averagePot: sumOfPots/room.pot.length}}); } Quiero poder resumir el código anterior con una línea usando mongoose updateMany . ¿Cómo puedo lograr eso?
Hazlo asi:
await roomModel.collection.updateMany({}, [{$set: {averagePot: {$toInt: {$avg: '$potArr.pot'}}}}]); Tienes que usar .collection en tu modelo para hacer que mongoose se comporte como mongod .
$toInt para redondear hacia abajo el posible resultado flotante. Puede omitir esa parte como se muestra a continuación.
await roomModel.collection.updateMany({}, [{$set: {averagePot: {$avg: '$potArr.pot'}}}]);