2016-05-11 13 views
3

Ich bin mit dem Erreichen weekofMonth statt WeekofYear fest. Kann mir jemand zeigen, wie ich das richtig machen kann?Mongodb WeekofMonth?

db.activity.aggregate([ 
    { 
     $group:{ 
      _id: { 
       week: { $week: "$createdAt" }, 
       month: { $month: "$createdAt" },  
       year: { $year: "$createdAt" } 
      }, 
      count: { $sum: 1 } 
     } 
    }, 
    { $match : { "_id.year" : 2016, "_id.month" : 5 } } 
]) 

Ausgabe

/* 1 */ 
{ 
    "_id" : { 
     "week" : 19, 
     "month" : 5, 
     "year" : 2016 
    }, 
    "count" : 133.0 
} 

/* 2 */ 
{ 
    "_id" : { 
     "week" : 18, 
     "month" : 5, 
     "year" : 2016 
    }, 
    "count" : 1.0 
} 

In den oben gezeigten Daten wird weekofMonth Anzeige tatsächlich nicht. Wie kann ich diese Woche erhalten, ist 18 die erste Woche des Monats?

Antwort

2

Die $ Woche Betreiber gibt Ihnen die Woche des Jahres als described in the docs.

Die Woche des Monats kann hier, indem sie den Tag des Monats und dividiert durch 7.

db.activity.aggregate([ 
    {$project: { 
     "year": {$year: "$createdAt"}, 
     "month": {$month: "$createdAt"}, 
     "weekOfMonth": {$floor: {$divide: [{$dayOfMonth: "$createdAt"}, 7]}} 
    }}, 
    {$group: { 
     "_id": {"year": "$year", "month": "$month", "weekOfMonth": "$weekOfMonth"}, 
     count: { $sum: 1 } 
    }}, 
    {$match : { "_id.year" : 2016, "_id.month" : 5}} 
]) 

Hinweis berechnet werden, dass die Woche des Monats 0 basiert. Wenn Sie möchten, dass es bei 1 startet, nur $add 1. Auch der Operator $floor ist neu in Version 3.2.

bearbeiten

Sie den Boden $mod mit simulieren kann

(die in Version 3.0 vorhanden)
"weekOfMonth": {$subtract: [{$divide: [{$dayOfMonth: "$createdAt"}, 7]}, {$mod: [{$divide: [{$dayOfMonth: "$createdAt"}, 7]}, 1]}]}, 
+0

Antwort ist wahr, aber mein Server ist mit Version 3.0.2 zum Einsatz, auf der Anwendungsebene zu tun , danke für die schnelle Antwort eine andere Frage innerhalb $ Match muss ich einige weitere Abfrageparameter übergeben, die so ist. childid: req.params.childid, word: {$ in: ["BAT", "CAT"]} nachdem ich das bestanden habe, bekomme ich keine Ausgabe und keinen Fehler. @joao –

+0

@ user1099855 nach dem $ Projektabschnitt verschwinden diese Felder. Sie fügen sie auch entweder zum $ -Projekt hinzu oder führen direkt am Anfang ein $ -Match aus (was wegen der Verwendung des Indexes empfohlen wird). – joao

+0

@ user1099855 check my edit, Sie können $ mod (funktioniert mit Version 3.0) anstelle von $ floor verwenden, um das gleiche Ergebnis zu erzielen. – joao