Puoi utilizzare la Pipeline di aggregazione
per aggiungere campi calcolati a un risultato. Di seguito sono riportati alcuni esempi di utilizzo di mongo shell, ma la sintassi nell'Aggregate() helper
di Mongoose è simile.
Ad esempio, per calcolare le somme (per documento utente) puoi utilizzare $add espressione
in un $project fase
:
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"] }
}}
)
Per calcolare i totali su più documenti è necessario utilizzare un $group fase
con un $sum accumulatore
, ad esempio:
db.user.aggregate(
{ $group: {
_id: null,
total: { $sum: { $add: ["$user_totaldocs", "$user_totalthings"] } },
totaldocs: { $sum: "$user_totaldocs" },
totalthings: { $sum: "$user_totalthings" }
}}
)
Potresti volere solo un total campo; Ho aggiunto in totaldocs e totalthings come esempi di calcolo di più campi.
Un gruppo _id di null combinerà i valori di tutti i documenti passati al $group fase, ma puoi anche utilizzare altri criteri qui (come il raggruppamento per user_id ).