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