sql >> Databasteknik >  >> NoSQL >> MongoDB

Fråga och summera allt med mongoose

Du kan använda Aggregation Pipeline för att lägga till beräknade fält till ett resultat. Det finns några exempel nedan som använder mongo skal, men syntaxen i Mongooses Aggregate()-hjälpare är liknande.

Till exempel, för att beräkna summor (per användardokument) kan du använda code>$add uttryck i ett $project skede :

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

För att beräkna summor över flera dokument måste du använda en $grupp skede med en $summa ackumulator , till exempel:

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

Du kanske bara vill ha en totalt fält; Jag har lagt till i totaldocs och totalthings som exempel på beräkning av flera fält.

En grupp _id av null kommer att kombinera värden från alla dokument som skickas till $gruppen steg, men du kan också använda andra kriterier här (som att gruppera efter användar-id ).



  1. MongoDB-uppdatering. Försöker ställa in ett fält från en egenskap hos en annan

  2. MongoDB på Ubuntu kommer inte att starta som en tjänst, ingenting i loggen

  3. Slår samman matrisfält i MongoDB-aggregation

  4. Node Mongo Native - hur vet man när en markör är slut?