私はキーと値のペアとして1つのフィールドを持つ簡単な文書を持っています。私はちょうどそれらのキーを介して集計でグループ操作を実行し、それらの値を追加したいです。しかし、ペアのキーは固定ではなく、何でもかまいません。MongoDB:動的キーと値のペアによる集約グループの操作
サンプルドキュメントです。
{
_id: 349587843,
matchPair: {
3 : 21,
9 : 4,
7 : 32
}
},
{
_id: 349587478,
matchPair: {
7 : 11,
54 : 32,
9 : 7,
2 : 19
}
}
そして、次のような結果が欲しいです。
{
_id : 3,
count : 21
},
{
_id : 9,
count : 11
},
{
_id : 7,
count : 43
},
{
_id : 54,
count : 32
},
{
_id : 2,
count : 19
}
私は心の中で次のクエリを持っていると$unwind
操作を使用してみましたが、「matchPairは」アレイではないと私は$sum
操作のために指定するかわからないので、それはおそらく動作しません。
db.MatchPairs.aggregate([
{ "$unwind" : "$matchPair" },
{ "$group" : {
_id: "$matchPair",
count : { $sum : $matchPair }
} }
]);
私はまた、地図-削減試みることができるが、それはあまりにも私は名前でemit()
キーと値にする必要があります。
私はこれには単純な解決策があると確信していますが、私はそれを理解することはできません。 $unwind
ためMongoDBのドキュメントの
キーが動的である場合、これは集約フレームワークでは不可能なので、mapReduceに行く必要があります。 – felix
です。 'emit()'関数でキーと値を指定する方法を教えてください。 –
類似の問題のマップの例を減らす:http://stackoverflow.com/a/41634637/2965883 – ares