C'est ce qu'on appelle l'ordre naturel :
natural order
L'ordre dans lequel la base de données fait référence aux documents sur le disque. Il s'agit de l'ordre de tri par défaut. Voir
$natural
etReturn in Natural Order
.
Cela confirme qu'en général, vous les obtenez dans le même ordre que celui que vous avez inséré, mais ce n'est pas garanti, comme vous l'avez remarqué.
Retour dans l'ordre naturel
Le
$natural
Le paramètre renvoie les éléments selon leur ordre naturel dans la base de données. Cette commande est une fonctionnalité de mise en œuvre interne, et vous ne devez pas vous fier à une structure particulière en son sein.Utilisation de l'index
Requêtes incluant un tri par
$natural
commande ne pas utiliser des index pour remplir le prédicat de la requête avec l'exception suivante :si le prédicat de la requête est une condition d'égalité sur le_id
champ{ _id: <value> }
, puis la requête avec le tri par$natural
la commande peut utiliser le_id
indice.MMAPv1
En règle générale, l'ordre naturel reflète l'ordre d'insertion à l'exception suivante pour le moteur de stockage MMAPv1. Pour le moteur de stockage MMAPv1, l'ordre naturel ne reflète pas l'ordre d'insertion si les documents sont déplacés en raison de la croissance des documents ou si les opérations de suppression libèrent de l'espace qui est ensuite occupé par les documents nouvellement insérés.
De toute évidence, comme les documents mentionnés, vous ne devriez pas s'appuyer sur cet ordre par défaut (Cet ordre est une fonctionnalité d'implémentation interne, et vous ne devez pas vous fier à une structure particulière en son sein. ).
Si vous avez besoin de trier les choses, utilisez les solutions de tri.
Fondamentalement, les deux appels suivants doivent renvoyer des documents dans le même ordre (puisque l'ordre par défaut est $natural
):
db.mycollection.find().sort({ "$natural": 1 })
db.mycollection.find()
Si vous voulez trier par un autre champ (par exemple name
) vous pouvez le faire :
db.mycollection.find().sort({ "name": 1 })