MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Interroga e somma tutto con la mangusta

Puoi utilizzare la Pipeline di aggregazione per aggiungere campi calcolati a un risultato. Di seguito sono riportati alcuni esempi di utilizzo di mongo shell, ma la sintassi nell'Aggregate() helper di Mongoose è simile.

Ad esempio, per calcolare le somme (per documento utente) puoi utilizzare $add espressione in un $project fase :

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"] }
    }}
)

Per calcolare i totali su più documenti è necessario utilizzare un $group fase con un $sum accumulatore , ad esempio:

db.user.aggregate(
    { $group: {
        _id: null,
        total:       { $sum: { $add: ["$user_totaldocs", "$user_totalthings"] } },
        totaldocs:   { $sum: "$user_totaldocs" },
        totalthings: { $sum: "$user_totalthings" }
    }}
)

Potresti volere solo un total campo; Ho aggiunto in totaldocs e totalthings come esempi di calcolo di più campi.

Un gruppo _id di null combinerà i valori di tutti i documenti passati al $group fase, ma puoi anche utilizzare altri criteri qui (come il raggruppamento per user_id ).