Du kan bruge Aggregation Pipeline
at tilføje beregnede felter til et resultat. Der er nogle eksempler nedenfor, der bruger mongo
shell, men syntaksen i Mongooses Aggregate()-hjælper
ligner.
For eksempel, til at beregne summer (pr. brugerdokument) kan du bruge
kode>$add udtryk
i et $projekt
scene
:
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"] }
}}
)
For at beregne totaler på tværs af flere dokumenter skal du bruge en $group
scene
med en $sum
akkumulator
, for eksempel:
db.user.aggregate(
{ $group: {
_id: null,
total: { $sum: { $add: ["$user_totaldocs", "$user_totalthings"] } },
totaldocs: { $sum: "$user_totaldocs" },
totalthings: { $sum: "$user_totalthings" }
}}
)
Du vil måske kun have den ene total
Mark; Jeg har tilføjet i totaldocs
og totalthings
som eksempler på beregning af flere felter.
En gruppe _id
af null
kombinerer værdier fra alle dokumenter, der er sendt til $group
fase, men du kan også bruge andre kriterier her (såsom gruppering efter bruger_id
).