MongoDb Wie Sie die Gruppe, indem Sie Monat und Jahr aus string
Ich bin mit Feld dateStr in der Sammlung
{ .... "dateStr" : "07/01/2020" .... }
{ .... "dateStr" : "07/01/1970" .... }
Ich möchte die Gruppe von Monat und Jahr aus dateStr Feld
Habe ich versucht
db.collection.aggregate(
{$project : {
month : {$month : new Date("$dateStr")},
year : {$year : new Date("$dateStr")}
}},
{$group : {
_id : {month : "$month" ,year : "$year" },
count : {$sum : 1}
}})
Ausgabe :
{
"result" : [
{
"_id" : {
"month" : 1,
"year" : 1970
},
"count" : 2
}
],
"ok" : 1
}
Aber ich bin mit zwei Jahren 1970,2020. Warum bin ich immer der einzelne Datensatz?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die Datum aggregation Betreiber auf etwas anderes ist, wenn eine
Date
Objekt selbst. Ihre ultimative beste Möglichkeit ist, um konvertieren Sie diese "strings", um die richtigeDate
Objekte, so können Sie die Abfrage korrekt in diesem und zukünftigen Operationen.Sagte, dass, wenn Sie Ihre "Saiten" haben immer eine gemeinsame Struktur, dann gibt es einen Weg, dies zu tun mit der aggregation framework tools. Es erfordert eine Menge an manipulation gedacht, dass nicht eine "optimale" Umgang mit dem problem. Aber mit einem Satz die Struktur des "double digits" und eine einheitliche Trennzeichen möglich wird dies durch die
$substr
Betreiber:Also JavaScript-casting funktioniert nicht innerhalb der aggregation framework. Sie können immer "feed" - Eingang, um die pipeline auf dem "client code" - Bewertung, aber der aggregation-Prozess selbst nicht beurteilen, einen code. Genau wie der basic-query-engine, basiert dies alles auf eine "Daten-Struktur" - Implementierung, die verwendet "native Betreiber" Anweisungen, um die Arbeit zu tun.
Können Sie Konvertierung von Zeichenfolgen in Datumsangaben in der aggregation pipeline. Sie sollten mit real
BSON-Date
Objekte, aber Sie können es tun mit strings, wenn es einem konsistenten format, die Sie in einer "lexikalischen Ordnung".Ich noch vorschlagen, dass Sie konvertieren Sie diese zu
BSON Dates
so schnell wie möglich. Und hüten Sie sich vor, dass die "Isodatum" oder UTC-Wert ist konstruiert mit einem anderen string-form. ie:In "yyyy-mm-dd" - format. Zumindest für die JavaScript-Aufruf.