2016-10-13 8 views
0

私はnode.jsを使ってmongodbを操作しています。私のクエリは、私が望む結果を与えるが、私はそれを並べ替えるようにしようとするにしても、それを並べ替えることはできない。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、年と深さですが、私がそれらを単独で試しても組み合わせても何も起こりませんsを結果に追加します。

何か間違っていますか?

ありがとうございます。

+0

あなたのコレクションのサンプルドキュメントを投稿する –

答えて

2

yeardepthのパラメータが_idオブジェクトの下にあるという問題があります。だから、使用して並べ替える必要があります。

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

それとも、ソート前にプロジェクト・フェーズを追加し、_idネスティング削除することができます。私はそれを考え出した

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

申し訳ありませんが、私はあなたの最初の提案を試みたが、うまくいきません。あなたの2番目の提案もありません。これらの2つのソリューションは、解決策を探すときに私が見つけたものですが、並べ替えを試みても何も変わりません。 – Vegar

0

を!それは奇妙な問題です... $projectで遊んだ後に、$projectがクエリの最後にあった場合、それは無視されたので、2つ入れてみました。$sort私の質問の最後は無視されます。だから今、私のクエリの最後は次のようになります。

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

これは私にとって特別なケースであれば、私にはわからない、またはそれは「正常な」バグであれば、私は他の人を救うかもしれない願っています私が持っていた不満。

関連する問題