sql >> Database >  >> NoSQL >> MongoDB

Vraag en som alles op met mangoest

U kunt de Aggregation Pipeline gebruiken om berekende velden aan een resultaat toe te voegen. Er zijn enkele voorbeelden hieronder met behulp van de mongo shell, maar de syntaxis in Mongoose's Aggregate()-helper is vergelijkbaar.

Om bijvoorbeeld sommen (per gebruikersdocument) te berekenen, kunt u de $add uitdrukking in een $project podium :

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

Om totalen over meerdere documenten te berekenen, moet u een $group gebruiken podium met een $sum accumulator , bijvoorbeeld:

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

Misschien wil je alleen die ene totaal veld; Ik heb toegevoegd in totaldocs en totalthings als voorbeelden van het berekenen van meerdere velden.

Een groep _id van null zal waarden combineren van alle documenten die zijn doorgegeven aan de $group stage, maar u kunt hier ook andere criteria gebruiken (zoals groeperen op user_id ).



  1. MongoDB:uitzondering in initAndListen:20 Poging om een ​​vergrendelingsbestand te maken in een alleen-lezen map:/data/db, beëindigen

  2. Een HASH opslaan in Redis op een rails-app

  3. Wat zijn alle mangoest-evenementen en waar zijn ze gedocumenteerd?

  4. Serialiseren van MongoDB find() return in niet-anonieme JSON-array, met behulp van PyMongo