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
).