我们假设我们有一个包含以下文件的集合
{_id:1, name:'a', category:'c1', count:1}
{_id:2, name:'b', category:'c1', count:3}
{_id:3, name:'c', category:'c1', count:5}
{_id:4, name:'d', category:'c2', count:2}
{_id:5, name:'e', category:'c2', count:3}
{_id:6, name:'f', category:'c2', count:6}
{_id:7, name:'g', category:'c2', count:7}
我试图构建某种"aggregation"
管道
所以在这种情况下,预期的结果应该是
[
{_id:'c1: docs:[
{_id:3, name:'c', category:'c1', count:5},
{_id:2, name:'b', category:'c1', count:3}
]},
{_id:'c2: docs:[
{_id:7, name:'g', category:'c2', count:7},
{_id:6, name:'f', category:'c2', count:6}
]},
]
目前,我采取了多个步骤来生成结果
无论如何以"aggregation"
方式实现这一目标?
答案 0 :(得分:0)
管理自己找出答案。它是如下所示。
collection.aggregate([
{$sort:{category:1, count:-1}},
{$group:{_id:'$category', docs:{$push:{_id:'$_id', name:'$name', count:'$count'}}}},
{$project:{_id:1, docs:{$slice:['$docs', 2]}}}
])
$sort
,$push
和$slice
共同努力发挥技巧。