Si chiama ordine naturale :
natural order
L'ordine in cui il database fa riferimento ai documenti su disco. Questo è l'ordinamento predefinito. Vedi $natural
e Return in Natural Order
.
Ciò conferma che in generale li ricevi nello stesso ordine in cui li hai inseriti, ma non è garantito, come hai notato.
Ritorno in ordine naturale
Il $natural
parametro restituisce gli elementi in base al loro ordine naturale all'interno del database. Questo ordinamento è una funzionalità di implementazione interna e non dovresti fare affidamento su una struttura particolare al suo interno.
Utilizzo dell'indice
Query che includono un ordinamento per $natural
ordine non non utilizzare gli indici per soddisfare il predicato della query con la seguente eccezione:Se il predicato della query è una condizione di uguaglianza su _id
campo { _id: <value> }
, quindi la query con l'ordinamento per $natural
l'ordine può utilizzare il _id
indice.
MMAPv1
In genere, l'ordine naturale riflette l'ordine di inserimento con la seguente eccezione per il motore di archiviazione MMAPv1. Per il motore di archiviazione MMAPv1, l'ordine naturale non riflette l'ordine di inserimento se i documenti si spostano a causa della crescita del documento o le operazioni di rimozione liberano spazio che viene poi occupato dai documenti appena inseriti.
Ovviamente, come i documenti menzionati, non dovresti fare affidamento su questo ordine predefinito (Questo ordinamento è una funzionalità di implementazione interna e non dovresti fare affidamento su una struttura particolare al suo interno. ).
Se hai bisogno di ordinare le cose, usa le soluzioni di ordinamento.
Fondamentalmente, le due chiamate seguenti dovrebbero restituire i documenti nello stesso ordine (poiché l'ordine predefinito è $natural
):
db.mycollection.find().sort({ "$natural": 1 })
db.mycollection.find()
Se desideri ordinare in base a un altro campo (ad es. name
) puoi farlo:
db.mycollection.find().sort({ "name": 1 })