I have a collection named room containing an array of pots called potArr. My room also have a property called average pot which should be equal to average of the potAmount values in potArr.
I want to constantly update the average pot.
Here is my code:
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}});
}
I want to be able to summorize the above code with one line using mongoose updateMany. How can I achieve that?
CodePudding user response:
Do it like this:
await roomModel.collection.updateMany({}, [{$set: {averagePot: {$toInt: {$avg: '$potArr.pot'}}}}]);
You have to use
.collectionon your model to makemongoosebehave likemongod.I uset
$toIntto round down the possible float outcome. You can skip that part like below.
await roomModel.collection.updateMany({}, [{$set: {averagePot: {$avg: '$potArr.pot'}}}]);
