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.