2017-05-24 17 views
0

Im Moment habe ich eine Mongoose Abfrage, die ich recht tue eine Menge in meiner Anfrage So etwas wieGruppendokumente für Monat in MongoDB

Collection 
    .find(selector) 
    .sort(sortCriteria) 
    .select(selectCriteria) 
    .populate(populateCriteria1) 
    .populate(populateCriteria2) 
    .then(docs => ...) 
    .catch(errHandler) 

aussieht.

Jedes Dokument in meiner Sammlung hat ein Datum. Ich möchte, dass die Dokumente nach Monat und Jahr gruppiert angezeigt werden. So sollte es so etwas wie

docs = [ 
    { _id: { year: 2017, month: 4 }, docs: [ ... ] }, 
    { _id: { year: 2017, month: 5 }, docs: [ ... ] }, 
    { _id: { year: 2017, month: 6 }, docs: [ ... ] } 
] 

Ich denke, werden dies ist ein einfaches .aggregate(), aber ich bin nicht sicher, wo ich sollte es gehören, da ich Filterung tue .find() mit, Sortieren mit .sort(), Feldauswahl .select() mit und füllt mit .populate().

Jedes Dokument hat das Feld date, so könnte es so etwas wie

Collection 
    .find(selector) 
    .aggregate([ 
    { $project: { month: { $month: $date }, year: { $year }, 
    { $group: { _id: { $month: $date, $year: $date }, docs: { $push: '' } } 
    ]) 

Antwort

0

Keine Notwendigkeit, ‚$ Projekt‘ sein, da Sie auch den Monat Methode in $group

verwenden können, also würden Sie bekommen etwas wie:

$group:{ 
    _id : { year: { $year: "$date" }, month: { $month: "$date" } }, 
    docs: { $push: { field1: "$field1", field2: "$field1" } } 
    }} 
+0

Danke aber kann ich es zusammen mit 'populate()' tun? Sie schreiben '$ push: {field1: ...'. Ist es möglich, nur zu sagen, dass es alle Felder, die ich ausgewählt habe, schieben sollte? – Jamgreen

+0

Oh, ich bin mir nicht sicher, ich bin nicht wirklich vertraut mit Mungo .. –