Datentypkonvertierung in MongoDB

Ich habe eine Sammlung namens Document in MongoDB. In Dokumenten dieser Sammlung ist ein Feld namens CreationDate im ISO-Datumstyp gespeichert. Meine Aufgabe ist es, die Anzahl der pro Tag erstellten Dokumente zu zählen und asynchron nach der Anzahl zu sortieren. Das Ausgabeformat muss [{_id: 'yyyy-MM-dd', cnt: x}] sein. Ich habe versucht, das Aggregationsframework wie folgt zu verwenden.

db.Document.aggregate( 
    , {$project: {_id:1, Year:{$year:'$CreationDate'}, Month:{$month:'$CreationDate'}, Date:{$dayOfMonth:'$CreationDate'}}}
    , {$group: {_id:{$concat:['$Year', '-', '$Month', '-', '$Date']}, cnt:{$sum:1}}}
    , {$sort:{'cnt':-1}}
);

Der Code gibt mir Fehler wie folgt:

$concat only supports strings, not NumberInt32

Ich verstehe, dass dies daran liegt, dass $ year, $ month und $ dayOfMonth alle die Nummer zurückgeben. Es ist möglich, das Feld _id als Objekt zu erstellen und es auf Anwendungsebene im gewünschten Format neu zu formatieren.

Aber aus technischer Sicht habe ich zwei Fragen:

Wie konvertiere ich eine Zahl in eine Zeichenkette in der MongoDB-Shell? In diesem Fall kann die Ausgabe von $ year in einen String konvertiert und in $ concat verwendet werden.

Gibt es eine bessere Möglichkeit, die ISODate-Ausgabe in verschiedene Datumsformate zu formatieren? In vielen Fällen benötigen wir nur einen bestimmten Teil eines ISODate, zum Beispiel: die Datumskomponente oder den Zeitanteil. Gibt es eingebaute MongoDb-Betreiber, um dies zu erreichen?

Vielen Dank im Voraus für jeden Rat.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage