前の質問では、パイプライン操作を使用して結果のグループの数を取得したいと思いました。提案されたように、私は以下を使用しました:
db.test.aggregate(
{$unwind: '$tags'},
{$group:{_id: '$tags', count:{$sum:1}}},
{$project:{tmp:{tag:'$_id', count:'$count'}}},
{$group:{_id:null, total:{$sum:1}, data:{$addToSet:'$tmp'}}}
)
カウントがわかったので、結果をページごとに表示したいので、のサブセットのみが必要になりdata
ます。私の最初の考えは、次のようなパイプライン内で使用$slice
することです。data
$project
...
{$project: {data : { $slice: [20,20] }, total: 1}
しかし、$slice
はの有効な操作ではないようです$project
。次の方法で回避策を試しました。
db.test.aggregate(
{$unwind: '$tags'},
{$group:{_id: '$tags', count:{$sum:1}}},
{$project:{tmp:{tag:'$_id', count:'$count'}}},
{$group:{_id:null, total:{$sum:1}, data:{$addToSet:'$tmp'}}},
{$unwind: '$data'},
{$skip: 20},
{$limit: 20}
)
しかし、表示されているように、私は別の$unwind
パイプラインを実行しました。私がやろうとしていることを達成するためのより良い解決策はありますか?