Puede usar el canalización de agregación
para agregar campos calculados a un resultado. Hay algunos ejemplos a continuación usando el mongo
shell, pero la sintaxis en el Aggregate() helper
de Mongoose es similar.
Por ejemplo, para calcular sumas (por documento de usuario) puede usar $add
expresión
en un $project
escenario
:
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"] }
}}
)
Para calcular los totales en varios documentos, debe usar un $group
escenario
con un $sum
acumulador
, por ejemplo:
db.user.aggregate(
{ $group: {
_id: null,
total: { $sum: { $add: ["$user_totaldocs", "$user_totalthings"] } },
totaldocs: { $sum: "$user_totaldocs" },
totalthings: { $sum: "$user_totalthings" }
}}
)
Es posible que desee solo el total
campo; He agregado en totaldocs
y totalthings
como ejemplos de cálculo de múltiples campos.
Un grupo _id
de null
combinará valores de todos los documentos pasados al $group
etapa, pero también puede usar otros criterios aquí (como agrupar por user_id
).