Você pode usar o pipeline de agregação para adicionar campos calculados a um resultado. Existem alguns exemplos abaixo usando o
mongo shell, mas a sintaxe no auxiliar de Aggregate()
do Mongoose É similar. Por exemplo, para calcular somas (por documento do usuário), você pode usar o
$add expressão
em um $project estágio
: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 os totais em vários documentos, você precisa usar um
$group estágio
com um $sum acumulador
, por exemplo:db.user.aggregate(
{ $group: {
_id: null,
total: { $sum: { $add: ["$user_totaldocs", "$user_totalthings"] } },
totaldocs: { $sum: "$user_totaldocs" },
totalthings: { $sum: "$user_totalthings" }
}}
)
Você pode querer apenas um
total campo; Eu adicionei em totaldocs e totalthings como exemplos de cálculo de vários campos. Um grupo
_id de null irá combinar valores de todos os documentos passados para o $group stage, mas você também pode usar outros critérios aqui (como agrupar por user_id ).