Du kan använda Aggregation Pipeline
för att lägga till beräknade fält till ett resultat. Det finns några exempel nedan som använder mongo
skal, men syntaxen i Mongooses Aggregate()-hjälpare
är liknande.
Till exempel, för att beräkna summor (per användardokument) kan du använda
code>$add uttryck
i ett $project
skede
:
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"] }
}}
)
För att beräkna summor över flera dokument måste du använda en $grupp
skede
med en $summa
ackumulator
, till exempel:
db.user.aggregate(
{ $group: {
_id: null,
total: { $sum: { $add: ["$user_totaldocs", "$user_totalthings"] } },
totaldocs: { $sum: "$user_totaldocs" },
totalthings: { $sum: "$user_totalthings" }
}}
)
Du kanske bara vill ha en totalt
fält; Jag har lagt till i totaldocs
och totalthings
som exempel på beräkning av flera fält.
En grupp _id
av null
kommer att kombinera värden från alla dokument som skickas till $gruppen
steg, men du kan också använda andra kriterier här (som att gruppera efter användar-id
).