11

さまざまなサイズの配列を持つレコードの数のリストを取得しようとしています。すべてのレコードの配列サイズの分布を取得したいので、次のようなヒストグラムを作成できます。

          | *
          | *
documents | *         *
          | *  *      *
          |_*__*__*___*__*___
            2  5  6  23  47

               Array Size

したがって、生のドキュメントは次のようになります。

{hubs : [{stuff:0, id:6}, {stuff:1"}, .... ]}
{hubs : [{stuff:0, id:6}]}`

これまでのところ、集約フレームワークと、ここで私が思いついたいくつかのヘルプを使用しています

db.sitedata.aggregate([{ $unwind:'$hubs'}, 
                       { $group : {_id:'$_id', count:{$sum:1}}}, 
                       { $group : {_id:'$count', count:{$sum:1}}},
                       { $sort  : {_id: 1}}])

これにより、私が望む結果が得られるようですが、それほど高速ではありません。このように、2 つのグループ通話を必要としないようなことができるのではないかと考えています。ここでは構文が間違っていますが、最初の _id フィールドにカウント値を入れようとしています。

db.sitedata.aggregate([{ $unwind:'$hubs'}, 
                       { $group : {_id:{$count:$hubs}, count:1}},
                       { $sort  : { _id: 1 }}])
4

1 に答える 1

7

2.6 がリリースされたので、集約フレームワークは新しい配列演算子$size$projectをサポートします。これにより、巻き戻しや再グループ化を行うことなく配列サイズを調整できます。

db.sitedata.aggregate([{ $project:{ 'count': { '$size':'$hubs'} } }, 
                       { $group : {_id:'$count', count:{$sum:1} } },
                       { $sort  : { _id: 1 } } ] )
于 2014-04-26T06:54:10.677 に答える