Het heet natuurlijke orde :
natural order
De volgorde waarin de database verwijst naar documenten op schijf. Dit is de standaard sorteervolgorde. Zie
$natural
enReturn in Natural Order
.
Dit bevestigt dat je ze over het algemeen in dezelfde volgorde krijgt als waarin je ze hebt geplaatst, maar dat is niet gegarandeerd, zoals je hebt opgemerkt.
Terug in natuurlijke volgorde
De
$natural
parameter retourneert items volgens hun natuurlijke volgorde in de database. Deze volgorde is een interne implementatiefunctie en u moet niet vertrouwen op een bepaalde structuur erin.Indexgebruik
Zoekopdrachten met een sortering op
$natural
bestellen doe niet gebruik indexen om aan het querypredikaat te voldoen, met de volgende uitzondering:Als het querypredicaat een gelijkheidsvoorwaarde is op de_id
veld{ _id: <value> }
, dan de zoekopdracht met de sortering op$natural
bestelling kan de_id
. gebruiken index.MMAPv1
Doorgaans weerspiegelt de natuurlijke volgorde de invoegvolgorde, met de volgende uitzondering voor de MMAPv1-opslagengine. Voor de MMAPv1-opslagengine komt de natuurlijke volgorde niet overeen met de invoegvolgorde als de documenten worden verplaatst vanwege documentgroei of als door verwijderingsbewerkingen ruimte vrijkomt die vervolgens wordt ingenomen door nieuw ingevoegde documenten.
Vanzelfsprekend, zoals de genoemde documenten, moet u niet vertrouw op deze standaardvolgorde (Deze volgorde is een interne implementatiefunctie en u mag niet vertrouwen op een bepaalde structuur daarin. ).
Als je de dingen moet sorteren, gebruik dan de sorteeroplossingen.
In principe moeten de volgende twee aanroepen documenten in dezelfde volgorde retourneren (aangezien de standaardvolgorde $natural
is) ):
db.mycollection.find().sort({ "$natural": 1 })
db.mycollection.find()
Als u op een ander veld wilt sorteren (bijv. name
) je kunt dat doen:
db.mycollection.find().sort({ "name": 1 })