Det kaldes naturlig orden :
natural order
Den rækkefølge, som databasen henviser til dokumenter på disk. Dette er standard sorteringsrækkefølge. Se $natural
og Return in Natural Order
.
Dette bekræfter, at du generelt får dem i samme rækkefølge, som du indsatte, men det er ikke garanteret – som du har bemærket.
Returnering i naturlig rækkefølge
$natural
parameter returnerer elementer i henhold til deres naturlige rækkefølge i databasen. Denne bestilling er en intern implementeringsfunktion, og du bør ikke stole på nogen bestemt struktur i den.
Indeksbrug
Forespørgsler, der inkluderer sortering efter $natural
bestille ikke brug indekser til at opfylde forespørgselsprædikatet med følgende undtagelse:Hvis forespørgselsprædikatet er en lighedsbetingelse på _id
felt { _id: <value> }
, derefter forespørgslen med sorteringen efter $natural
ordre kan bruge _id
indeks.
MMAPv1
Typisk afspejler den naturlige rækkefølge indsættelsesrækkefølgen med følgende undtagelse for MMAPv1-lagermotoren. For MMAPv1-lagringsmotoren afspejler den naturlige rækkefølge ikke indsættelsesrækkefølgen, hvis dokumenterne flyttes på grund af dokumentvækst, eller fjernoperationer frigør plads, som derefter optages af nyligt indsatte dokumenter.
Som de nævnte dokumenter bør du naturligvis ikke stole på denne standardrækkefølge (Denne bestilling er en intern implementeringsfunktion, og du bør ikke stole på nogen bestemt struktur i den. ).
Hvis du skal sortere tingene, så brug sorteringsløsningerne.
Grundlæggende skal de følgende to opkald returnere dokumenter i samme rækkefølge (da standardrækkefølgen er $natural
):
db.mycollection.find().sort({ "$natural": 1 })
db.mycollection.find()
Hvis du vil sortere efter et andet felt (f.eks. name
) kan du gøre det:
db.mycollection.find().sort({ "name": 1 })