Anda telah membuat kesalahan klasik untuk memiliki nama bidang yang berubah-ubah. MongoDB "bebas skema", tetapi itu tidak berarti Anda tidak perlu memikirkan skema Anda. Nama kunci harus deskriptif, dan dalam kasus Anda, f.e. "S2" sebenarnya tidak berarti apa-apa. Untuk melakukan sebagian besar jenis kueri dan operasi, Anda perlu mendesain ulang skema untuk menyimpan data Anda seperti ini:
_id:...
Segment:[
{ field: "S1", value: 1 },
{ field: "S2", value: 5 },
{ field: "Sn", value: 10 },
]
Anda kemudian dapat menjalankan kueri Anda seperti:
db.collection.aggregate( [
{ $unwind: "$Segment" },
{ $group: {
_id: '$_id',
sum: { $sum: '$Segment.value' }
} }
] );
Yang kemudian menghasilkan sesuatu seperti ini (dengan satu-satunya dokumen dari pertanyaan Anda):
{
"result" : [
{
"_id" : ObjectId("51e4772e13573be11ac2ca6f"),
"sum" : 16
}
],
"ok" : 1
}