sql >> Base de Datos >  >> NoSQL >> MongoDB

Consulta y suma todo con mangosta

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