MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Fragen Sie ab und summieren Sie alles mit Mongoose

Sie können die Aggregationspipeline verwenden um berechnete Felder zu einem Ergebnis hinzuzufügen. Nachfolgend finden Sie einige Beispiele für die Verwendung von mongo Shell, sondern die Syntax in Mongooses Aggregate()-Helfer ist ähnlich.

Um beispielsweise Summen (pro Benutzerdokument) zu berechnen, können Sie den $add Ausdruck in einem $project Stufe :

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

Um Summen über mehrere Dokumente hinweg zu berechnen, müssen Sie eine $group verwenden Stufe mit einem $sum Akku , zum Beispiel:

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

Möglicherweise möchten Sie nur die eine Gesamtsumme aufstellen; Ich habe totaldocs hinzugefügt und Gesamtsummen als Beispiele für die Berechnung mehrerer Felder.

Eine Gruppen-_id von null kombiniert Werte aus allen Dokumenten, die an $group übergeben werden Stufe, aber Sie können hier auch andere Kriterien verwenden (z. B. die Gruppierung nach user_id ).