MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Consulta e soma tudo com mangusto


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