MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie summiere ich alle Felder in einem Unterdokument von MongoDB?

Sie haben den klassischen Fehler begangen, willkürliche Feldnamen zu verwenden. MongoDB ist „schemafrei“, aber das bedeutet nicht, dass Sie nicht über Ihr Schema nachdenken müssen. Tastennamen sollten aussagekräftig sein und in Ihrem Fall z.B. "S2" bedeutet nicht wirklich etwas. Um die meisten Arten von Abfragen und Operationen durchzuführen, müssen Sie Ihr Schema neu gestalten, um Ihre Daten wie folgt zu speichern:

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

Sie können dann Ihre Abfrage wie folgt ausführen:

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

Was dann zu so etwas führt (mit dem einzigen Dokument aus Ihrer Frage):

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