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