sql >> Database >  >> NoSQL >> MongoDB

Hoe alle velden in een subdocument van MongoDB optellen?

U hebt de klassieke fout gemaakt om willekeurige veldnamen te hebben. MongoDB is "schemavrij", maar dat betekent niet dat u niet aan uw schema hoeft te denken. Sleutelnamen moeten beschrijvend zijn, en in uw geval, b.v. "S2" betekent niet echt iets. Om de meeste soorten query's en bewerkingen uit te voeren, moet u uw schema opnieuw ontwerpen om uw gegevens als volgt op te slaan:

_id:...
Segment:[
    { field: "S1", value: 1 },
    { field: "S2", value: 5 },
    { field: "Sn", value: 10 },
]

U kunt uw zoekopdracht vervolgens als volgt uitvoeren:

db.collection.aggregate( [
    { $unwind: "$Segment" },
    { $group: {
        _id: '$_id', 
        sum: { $sum: '$Segment.value' } 
    } } 
] );

Wat dan resulteert in iets als dit (met het enige document uit je vraag):

{
    "result" : [
        {
            "_id" : ObjectId("51e4772e13573be11ac2ca6f"),
            "sum" : 16
        }
    ],
    "ok" : 1
}


  1. Kan geen verbinding maken met mongodb via machine ip

  2. Apache Hadoop Ozon Beveiliging – Authenticatie

  3. Hoe alle hosts toe te staan ​​tot een replicaset in mongodb

  4. MongoDB $ lookup Objectid krijgt lege array?