In a previous question I wanted to obtain a count of the resulting groups using pipeline operations. As suggested, I used the following:
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'}}}
)
Now having known the count, I would like to display the results by page so I would only need a subset of data
. My initial thought would be using $slice
on data
within a $project
pipeline like:
...
{$project: {data : { $slice: [20,20] }, total: 1}
But it appears that $slice
is not a valid operation for $project
. I tried a workaround by doing:
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}
)
But as it appears, I performed another $unwind
pipeline. Is there a better solution to achieve what I am trying to do?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…