MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

In che modo MongoDB ordina i propri documenti in un'unica raccolta?

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 })