आपने मनमाना फ़ील्ड नाम रखने की शास्त्रीय गलती की है। MongoDB "स्कीमा-मुक्त" है, लेकिन इसका मतलब यह नहीं है कि आपको अपनी स्कीमा के बारे में सोचने की आवश्यकता नहीं है। मुख्य नाम वर्णनात्मक होने चाहिए, और आपके मामले में, f.e. "S2" का वास्तव में कोई मतलब नहीं है। अधिकांश प्रकार के प्रश्नों और संचालनों को करने के लिए, आपको अपने डेटा को इस तरह संग्रहीत करने के लिए स्कीमा को फिर से डिज़ाइन करना होगा:
_id:...
Segment:[
{ field: "S1", value: 1 },
{ field: "S2", value: 5 },
{ field: "Sn", value: 10 },
]
फिर आप अपनी क्वेरी चला सकते हैं जैसे:
db.collection.aggregate( [
{ $unwind: "$Segment" },
{ $group: {
_id: '$_id',
sum: { $sum: '$Segment.value' }
} }
] );
जिसके परिणामस्वरूप कुछ ऐसा होता है (आपके प्रश्न से एकमात्र दस्तावेज़ के साथ):
{
"result" : [
{
"_id" : ObjectId("51e4772e13573be11ac2ca6f"),
"sum" : 16
}
],
"ok" : 1
}