2017-02-18 4 views
2

タイプのそれぞれについて5を示す集合演算を作成するにはどうすればよいですか? たとえば、type= 1の5、type=2の5、type=3の5を表示する必要があります。集計を使用する各タイプの5つの要素を返します

は、私が試してみました:

db.items.aggregate([ 
    {$match : { "type" : { $gte:1,$lte:3 }}}, 
    {$project: { "type": 1, "subtipo": 1, "dateupdate": 1, "latide": 1, "long": 1, "view": 1,month: { $month: "$dateupdate" } }}, 
    {$sort:{view: -1, dateupdate: -1}}, 
    {$limit:5} 
]); 

答えて

2

$matchパイプラインの後、あなたは、元の文書の配列を作成し、最初のグループを行う必要があります。その後、$slice 5要素を返すためのドキュメントを配列できます。

直感この例で追跡することができる。

db.items.aggregate([ 
    { '$match' : { 'type': { '$gte': 1, '$lte': 3 } } }, 
    {  
     '$group': { 
      '_id': '$type', 
      'docs': { '$push': '$$ROOT' }, 
     } 
    }, 
    { 
     '$project': { 
      'five_docs': { 
       '$slice': ['$docs', 5] 
      } 
     } 
    } 
]) 

上記アレイにソートされていない5つのドキュメントを返します。

db.items.aggregate([ 
    { '$match' : { 'type': { '$gte': 1, '$lte': 3 } } }, 
    { '$sort': { 'type': 1, 'dateupdate': -1 } }, // <-- re-order here 
    {  
     '$group': { 
      '_id': '$type', 
      'docs': { '$push': '$$ROOT' }, 
     } 
    }, 
    { 
     '$project': { 
      'top_five': { 
       '$slice': ['$docs', 5] 
      } 
     } 
    } 
]) 
:あなたはソート順にTOP 5書類を返却する必要があるなら、あなたはドキュメントが typedateupdate分野で $groupパイプラインになって再注文のドキュメントをグループ化する前 $sortパイプラインを導入することができます
関連する問題