U kunt de Aggregation Pipeline
gebruiken om berekende velden aan een resultaat toe te voegen. Er zijn enkele voorbeelden hieronder met behulp van de mongo
shell, maar de syntaxis in Mongoose's Aggregate()-helper
is vergelijkbaar.
Om bijvoorbeeld sommen (per gebruikersdocument) te berekenen, kunt u de $project
podium
:
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"] }
}}
)
Om totalen over meerdere documenten te berekenen, moet u een $group gebruiken
podium
met een $sum
accumulator
, bijvoorbeeld:
db.user.aggregate(
{ $group: {
_id: null,
total: { $sum: { $add: ["$user_totaldocs", "$user_totalthings"] } },
totaldocs: { $sum: "$user_totaldocs" },
totalthings: { $sum: "$user_totalthings" }
}}
)
Misschien wil je alleen die ene totaal
veld; Ik heb toegevoegd in totaldocs
en totalthings
als voorbeelden van het berekenen van meerdere velden.
Een groep _id
van null
zal waarden combineren van alle documenten die zijn doorgegeven aan de $group
stage, maar u kunt hier ook andere criteria gebruiken (zoals groeperen op user_id
).