MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Interroger et additionner tout avec la mangouste

Vous pouvez utiliser le Pipeline d'agrégation pour ajouter des champs calculés à un résultat. Il y a quelques exemples ci-dessous utilisant le mongo shell, mais la syntaxe dans l'assistant Aggregate() de Mongoose est similaire.

Par exemple, pour calculer des sommes (par document utilisateur), vous pouvez utiliser le $add expression dans un $project étape :

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

Pour calculer les totaux sur plusieurs documents, vous devez utiliser un $group étape avec un $sum accumulateur , par exemple :

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

Vous ne voudrez peut-être qu'un seul total champ; J'ai ajouté dans totaldocs et totalthings comme exemples de calcul de plusieurs champs.

Un groupe _id de null combinera les valeurs de tous les documents passés au $group stade, mais vous pouvez également utiliser d'autres critères ici (tels que le regroupement par user_id ).