2016-10-13 6 views
0

mongodb를 사용하기 위해 node.js를 사용하고 있습니다. 내 쿼리를 통해 원하는 결과를 얻을 수 있지만 정렬 할 때 어떤 식 으로든 정렬 할 수는 없습니다. (연도 별, 다음 깊이) 나는이 같은 결과를 좋아했을MongoDB with node.js, 그룹 집계를 정렬하는 방법을 알 수 없습니다.

{ _id: { year: 2015, depth: 17.5 }, average: 7.809660041265659 } 
{ _id: { year: 2015, depth: 16.5 }, average: 7.849712114661603 } 
{ _id: { year: 2016, depth: 17.5 }, average: 7.402677186121112 } 
{ _id: { year: 2016, depth: 16.5 }, average: 7.565136208888859 } 

:

을 여기

내가이 결과를 얻을이에서 쿼리

var query = function (db, callback) { 
    var cursor = db.collection('collection').aggregate({ 
      $match: { 
       "startdatetime": { 
        $gte: new Date([fromDate]), 
        $lte: new Date([toDate]) 
       } 
      } 
     }, 
     {$match: {"depth": {$gte: depthFrom, $lte: depthTo}}}, 
     {$unwind: "$dives"}, {$match: {"depth": {$gte: depthFrom, $lte: depthTo}}}, 
     { 
      $group: { 
       _id: {year: {$year: "$startdatetime"},depth: "depth"}, 
       average: {$avg: "$"+[parameter]} 
      } 
     }, {$sort: {year: 1,depth:1}}); 
    cursor.each(function (err, doc) { 
     assert.equal(err, null); 
     if (doc != null) { 
      console.log(doc); 
     } else { 
      callback(); 
     } 
    }) 
}; 

의 예

{ _id: { year: 2015, depth: 16.5 }, average: 7.849712114661603 } 
{ _id: { year: 2015, depth: 17.5 }, average: 7.809660041265659 } 
{ _id: { year: 2016, depth: 16.5 }, average: 7.565136208888859 } 
{ _id: { year: 2016, depth: 17.5 }, average: 7.402677186121112 } 

나는 _id : 1, 년 및 깊이로 정렬하려고했으나 아무리 혼자서 시도해도 조합해서 사용해도 아무 일도 일어나지 않습니다. 결과에.

내가 잘못 했나요?

미리 감사드립니다.

+0

컬렉션의 샘플 문서 –

답변

2

문제는 yeardepth 매개 변수가 _id 개체보다 아래입니다.

{$sort: {'_id.year': 1, '_id.depth':1 }} 

을 또는 당신은 정렬하기 전에 프로젝트 단계를 추가하고 _id 중첩을 제거 할 수 있습니다 : 그래서 당신은 사용하여 분류한다

{$project: {_id: 0, year: '$_id.year', depth: '$_id.depth', average: 1 }} 
+0

게시하기 죄송합니다. 귀하의 첫 번째 제안을 시도했지만 언급하지 않았 음에 유의해야합니다. 두 번째 제안도하지 않습니다. 문제에 대한이 두 가지 솔루션은 솔루션을 검색 할 때 찾은 것이지만 정렬 기준에 관계없이 아무 것도 변경되지 않습니다. – Vegar

0

내가 그것을 알아 냈어! 이상한 문제입니다 ... $project으로 놀고 난 후 $project이 끝나면 무시 된 것입니다. 따라서 두 개를 시도한 후에 서로 $sort을 시도했습니다. 내 쿼리에서 마지막으로 무시 된 것은 무시됩니다. 그래서 지금, 내 쿼리의 끝은 다음과 같습니다

{$sort:{year:-1}},{$sort:{year:-1}}); 

나는이 나를 위해 특별한 경우입니다 알고하지 않거나은 "정상적인"버그,하지만 난 다른 사람을 구원 코자 희망하는 경우 내가 가진 좌절감.