2017-03-31 5 views
0

Dieser Meteor Servercode versucht Dokumente zu gruppieren und sortiert sie nach der Eigenschaft "period" aufsteigend, aber es tut es nicht, irgendeine Idee, wie es zu beheben? thxSo sortieren Sie Dokumente in Meteorhacken: Gesamtausgabe

let invoicePopulation = UsageCol.aggregate([ 
     { 
      $match: { 
      action: {$in: ['a', 'b', 'c']}, 
      userId: doc.userId 
      } 
     }, 
     { 
      $group: { 
      _id: {period: "$period"}, 
      count: {$sum: 1} 
      } 
     }, 
     { 
      "$sort" : { 
      "period" : 1 
      } 
     } 
     ]); 

     //output 
     [{"_id":{"period":"42017"},"count":14},{"_id":{"period":"22017"},"count":1},{"_id":{"period":"32017"},"count":271}] 

//needs to be 
[{"_id":{"period":"22017"},"count":1},{"_id":{"period":"32017"},"count":271},{"_id":{"period":"42017"},"count":14}] 

Antwort

1

Ihr $group scheint mir seltsam. Normalerweise möchten Sie in einem bestimmten Feld gruppieren, und dieses Feld würde Ihre _id werden (da das Feld jetzt eindeutig ist).

Die Art, wie Sie es in Ihrem Code haben, legt ein Unterdokument als Wert für _id fest. Wenn das wirklich das ist, was Sie wollen, dann sollte Ihr $sort dies sein.

{ 
    $sort: { 
    "_id.period": 1 
    } 
} 

Wenn Sie keine _id Unter Dokument erstellen möchten, dann sollten Sie Ihre $group wie dieses Problem zu beheben.

let invoicePopulation = UsageCol.aggregate([ 
    { 
    $match: { 
     action: {$in: ['a', 'b', 'c']}, 
     userId: doc.userId 
    } 
    }, 
    { 
    $group: { 
     _id: "$period", 
     count: {$sum: 1} 
    } 
    }, 
    { 
    $sort : { 
     "period" : 1 
    } 
    } 
]);