あなたは任意のフィールド名を持つという古典的な間違いを犯しました。 MongoDBは「スキーマフリー」ですが、スキーマについて考える必要がないという意味ではありません。キー名はわかりやすいものにする必要があります。あなたの場合は、 「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
}