En commençant par les dates qui ne trient pas correctement ...
Si vous stockez une date en tant que string
, il doit être triable en tant que chaîne. C'est assez simple:
2013-11-08 // yyyy-mm-dd (the dashes would be optional)
Tant que chaque pièce de la chaîne de date est rembourrée avec 0
À juste titre, les cordes seront toutes sorties naturellement et dans la façon dont vous vous attendez.
Un temps de date complet est stocké en UTC généralement:
2013-11-23T10:46:01.914Z
Mais, je vous suggérerais également au lieu de stocker une valeur de date en tant que chaîne, vous considérez si l'utilisation d'une date de mongodb native aurait plus de sens (référence). Si vous regardez le cadre d'agrégation de Mongodb, vous trouverez qu'il y en a beaucoup les fonctions Cela peut manipuler ces dates, tandis qu'une chaîne est très limitée.
En ce qui concerne le tri des chaînes, il a été souligné qu'il est de tri comme un ordinateur stocke les données plutôt que la façon dont vous triez en tant que personne. Si vous considérez que la chaîne est stockée comme sa représentation ASCII / UTF-8, vous devriez voir pourquoi le tri fonctionne comme:
Zoe = [90, 111, 101]
geo = [103, 101, 111]
Si vous deviez les trier en ordre décroissant comme vous l'avez spécifié, vous devriez voir comment "geo"
La représentation des octets internes est plus grande que celle de la chaîne "Zoe"
(avec 103
tri plus élevé que 90
dans ce cas).
En règle générale, la recommandation lors de l'utilisation de MongoDB est de stocker les cordes deux fois si vous avez besoin de trier une chaîne qui a un cas mixte:
- Chaîne d'origine (
"Title"
)
- Comme une chaîne normalisée. Peut-être par exemple, tous comme "minuscules", éventuellement avec des caractères accentués également convertis en un caractère commun. Donc, vous vous retrouveriez avec un nouveau champ nommé
"SortedTitle"
Par exemple et votre code l'utiliserait pour trier, mais affiche le réel "Title"
aux utilisateurs.