在上一个问题中,我想使用管道操作获取结果组的计数。按照建议,我使用了以下内容:
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
on ,例如: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
管道。有没有更好的解决方案来实现我想要做的事情?