sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan summerer man alle felter i et underdokument af MongoDB?

Du har lavet den klassiske fejl at have vilkårlige feltnavne. MongoDB er "skema-fri", men det betyder ikke, at du ikke behøver at tænke på dit skema. Nøglenavne skal være beskrivende, og i dit tilfælde, f.eks. "S2" betyder ikke rigtig noget. For at kunne udføre de fleste former for forespørgsler og operationer skal du omdesigne dit skema for at gemme dine data sådan her:

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

Du kan derefter køre din forespørgsel som:

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

Hvilket så resulterer i noget som dette (med det eneste dokument fra dit spørgsmål):

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


  1. Lyt efter ændringer i Redis-listen

  2. Sådan sletter du nøgler, der matcher et mønster i Redis Cluster

  3. Kan ikke finde dokumenter, der søger efter ObjectId ved hjælp af Mongoose

  4. Hvordan får jeg den dato, en MongoDB-samling blev oprettet ved hjælp af MongoDB C#-driver?