Beginnend mit den Daten, die nicht richtig sortieren ....
Wenn Sie ein Datum als Datum speichern string
, Es muss als Zeichenfolge sortierbar sein. Es ist ganz einfach:
2013-11-08 // yyyy-mm-dd (the dashes would be optional)
Solange jedes Stück der Datumsschnur mit gepolstert ist 0
Richtig, die Saiten werden natürlich auf natürliche Weise und in der Art und Weise erwartet.
In UTC wird in der Regel eine vollständige Datumszeit gespeichert: In der Regel:
2013-11-23T10:46:01.914Z
Aber ich würde Ihnen auch vorschlagen, dass Sie anstatt einen Datumswert als Zeichenfolge zu speichern, überlegen Sie, ob die Verwendung eines nativen MongoDB -Datums mehr Sinn machen würde (Hinweis). Wenn Sie sich das Aggregationsrahmen von MongoDB ansehen, werden Sie feststellen, dass es viele gibt Funktionen Das kann diese Daten manipulieren, während eine Saite sehr begrenzt ist.
In Bezug auf die Sortierung der Zeichenfolge wurde darauf hingewiesen, dass es eher die Daten sortiert, und nicht die Art und Weise, wie Sie als Person sortieren würden. Wenn Sie die Zeichenfolge als ASCII/UTF-8-Darstellung aufbewahren, sollten Sie sehen, warum die Sortierung so funktioniert, wie sie ist:
Zoe = [90, 111, 101]
geo = [103, 101, 111]
Wenn Sie diese in absteigender Reihenfolge sortieren, wie Sie angegeben haben, sollten Sie sehen, wie "geo"
Die interne Byte -Darstellung ist größer als die der Zeichenfolge "Zoe"
(mit 103
Sortieren höher als 90
in diesem Fall).
In der Regel wird die Empfehlung bei der Verwendung von MongoDB darin bestehen, die Saiten zweimal zu speichern, wenn Sie eine Zeichenfolge sortieren müssen, die gemischtes Gehäuse hat:
- Originalzeichenfolge (
"Title"
)
- Als normalisierte Zeichenfolge. Möglicherweise zum Beispiel alle als "Kleinbuchstaben" "möglicherweise mit akzentuierten Zeichen, die auch in einen gemeinsamen Charakter konvertiert sind. Sie würden also ein neues Feld namens namens erhalten
"SortedTitle"
Zum Beispiel und Ihr Code würde das verwenden, um zu sortieren, aber das tatsächliche anzeigen "anzeigen"Title"
für Benutzer.