2016-06-16 128 views
3

比方說,我們有一個文檔集合如下MongoDB的總文檔

{_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"管道到

    1. 組文件對於每個類別,按數量遞減排列前兩位文件

    因此,在第是的情況下,預期的結果應該是這樣的

    [ 
        {_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} 
        ]},   
    ] 
    

    目前,我採取多個步驟來產生結果

    1. 確定類別列表
    2. 重複查找{類別:X},{排序: [[ '計數', '降序']],限制:2}命令
    3. 合併的結果到一個共同的陣列

    反正有一個請在"aggregation"的方式下點擊這個?

  • +0

    你試過做任何查詢嗎? – Shrabanee

    +0

    目前我正在採取多個步驟來處理這個問題。 – Lee

    +1

    無論如何,我想出了一個答案。感謝所有的贊成票和評論。將在短時間內發佈答案。 – Lee

    回答

    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工作tegether玩的小伎倆。