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