Vous pouvez utiliser le Pipeline d'agrégation
pour ajouter des champs calculés à un résultat. Il y a quelques exemples ci-dessous utilisant le mongo
shell, mais la syntaxe dans l'assistant Aggregate()
de Mongoose est similaire.
Par exemple, pour calculer des sommes (par document utilisateur), vous pouvez utiliser le $add
expression
dans un $project
étape
:
db.user.aggregate(
// Limit to relevant documents and potentially take advantage of an index
{ $match: {
user_id: "foo"
}},
{ $project: {
user_id: 1,
total: { $add: ["$user_totaldocs", "$user_totalthings"] }
}}
)
Pour calculer les totaux sur plusieurs documents, vous devez utiliser un $group
étape
avec un $sum
accumulateur
, par exemple :
db.user.aggregate(
{ $group: {
_id: null,
total: { $sum: { $add: ["$user_totaldocs", "$user_totalthings"] } },
totaldocs: { $sum: "$user_totaldocs" },
totalthings: { $sum: "$user_totalthings" }
}}
)
Vous ne voudrez peut-être qu'un seul total
champ; J'ai ajouté dans totaldocs
et totalthings
comme exemples de calcul de plusieurs champs.
Un groupe _id
de null
combinera les valeurs de tous les documents passés au $group
stade, mais vous pouvez également utiliser d'autres critères ici (tels que le regroupement par user_id
).