Datentyp-Konvertierung in MongoDB

Habe ich eine Sammlung der sogenannten Dokument in MongoDB. Dokumente in dieser Sammlung haben ein Feld namens CreationDate gespeichert in ISO-date-Typ. Meine Aufgabe ist es, die Anzahl der erstellten Dokumente pro Tag und Sortieren Sie nach der Anzahl asynchron. Das Ausgabeformat ist erforderlich, um
[{_id:'yyyy-MM-dd', cnt:x}]. Ich habe versucht, die aggregation framework als unten.

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}}
);

Den code gibt mir Fehler wie folgt:

$concat only supports strings, not NumberInt32

Ich verstehe, das ist, weil $Jahr, $Monat und $dayOfMonth ganze Zahl zurück. Es ist möglich, zu Komponieren, das _id Feld als ein Objekt und es neu zu formatieren in das gewünschte format in der Anwendung-Ebene.

Aber aus technischer Sicht, ich habe zwei Fragen:

  1. Wie konvertiert eine Zahl zu einem string in MongoDB shell? In diesem Fall wird die Ausgabe von $Jahr kann dann in eine Zeichenfolge konvertiert werden und verwendet in $concat.

  2. Gibt es eine bessere Art und Weise zu formatieren Isodatum Ausgabe verschiedener Datumsformate? In vielen Fällen brauchen wir nur einen bestimmten Teil einer Isodatum zum Beispiel: Datum-Komponente oder der Zeit Teil. Gibt es eine MongoDb eingebauten Operatoren um dies zu erreichen?

Vielen Dank im Voraus für jede Beratung.

  • Gibt es einen Grund, Sie benötigen, um die Ausgabe zu formatieren komplett in MongoDB? Ich würde einfach schreiben, ein kleines Skript zu formatieren, einige string-Ausgabe auf der Grundlage der Unterlagen, die er erhält. Ansonsten, Sie sollten look into MapReduce.
  • Philipp, ohne Grund! Ich versuche nur, zu erkunden. Trotzdem danke.
InformationsquelleAutor Lee | 2014-08-07
Schreibe einen Kommentar