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