2013-02-07 13 views
12

Ich arbeite an einem Nodejs + Mongodb-Projekt mit Mungo. Jetzt bin ich auf eine Frage gestoßen, auf die ich keine Antwort weiß. Ich verwende Aggregations-Framework, um gruppierte Ergebnisse zu erhalten. Die Gruppierung erfolgt zu einem Datum ohne Zeitangabe wie: "2013 02 06". Code sieht so aus:Sortieren nach Datum in Mungo Aggregation Framework

Die gruppierten Ergebnisse sind perfekt, außer dass sie nicht sortiert sind. Hier ist ein Beispiel für Ausgabe:

[ 
    { 
     count: 1, 
     date: { 
      year: 2013, 
      month: 2, 
      day: 7 
     } 
    }, 
    { 
     count: 1906, 
     date: { 
      year: 2013, 
      month: 2, 
      day: 4 
     } 
    }, 
    { 
     count: 1580, 
     date: { 
      year: 2013, 
      month: 2, 
      day: 5 
     } 
    }, 
    { 
     count: 640, 
     date: { 
      year: 2013, 
      month: 2, 
      day: 6 
     } 
    } 
] 

Ich weiß, dass die Sortierung durch Zugabe dieses getan wird: {$sort: val}. Aber jetzt bin ich nicht sicher, was die val sein sollte, so dass die Ergebnisse nach Datum sortiert werden würden, da mein Gruppierungsschlüssel ein Objekt von 3 Werten ist, die das Datum aufbauen. Weiß jemand, wie das erreicht werden könnte?

EDIT Lassen Sie sich diese tryed und es funktionierte :)

{$sort: {"date.year":1, "date.month":1, "date.day":1}}

Antwort

9

Es scheint, dass diese Frage eine sehr einfache Antwort hat :) Ich muss einfach durch mehrere nesteed Spalten so sortieren:

{$sort: {"date.year":1, "date.month":1, "date.day":1}} 
+0

Ich denke, Sie könnten auch '{$ sort: {" date ": 1}}' – knowbody

5

Ich blieb mit dem gleichen Problem stecken, danke für Ihre Antwort. Aber ich fand heraus, dass Sie das gleiche Ergebnis mit weniger Code

MyModel.aggregate([ 
      {$match: {$and: [{created_date: {$gte: start_date}}, {created_date: {$lte: end_date}}]}}, 
      {$group: { 
       _id: { 
        year: {$year: "$created_at"}, 
        month: {$month: "$created_at"}, 
        day: {$dayOfMonth: "$created_at"} 
       }, 
       count: {$sum: 1} 
      }}, 
      {$project: { 
       date: "$_id", // so this is the shorter way 
       count: 1, 
       _id: 0 
      }}, 
      {$sort: {"date": 1} } // and this will sort based on your date 
     ], callback); 
0

nach Datum bekommen können nur werden Sortierung Dies würde funktionieren, wenn Sie, wenn Sie andere columsn mußten zu sortieren. Sie müssten erweitern _id

+0

Korrekturgruppe nur durch Datum –

+0

Sie sollten Ihre Antwort mit Ihrer Korrektur aktualisieren, nicht als a Kommentar. – drneel