MongoDB Query Sort() e Limit() con ordine per esempi

⚡ Riepilogo intelligente

MongoDB I modificatori di query Sort() e Limit() controllano quanti documenti vengono restituiti da una query e in quale ordine. Il metodo limit() limita il numero di risultati, mentre sort() ordina i documenti in ordine crescente o decrescente utilizzando i valori 1 o -1.

  • 🔢 Limita risultati: Il metodo limit() limita il numero di documenti restituiti da una query; ad esempio, limit(2) restituisce due record.
  • ⬇️ Ordina in ordine decrescente: sort({field:-1}) restituisce i documenti in ordine decrescente in base al campo scelto.
  • ⬆️ Ordina in ordine crescente: sort({field:1}) restituisce i documenti in ordine crescente, che è anche la direzione predefinita.
  • ⏭️ Salta per la paginazione: Il metodo skip() ignora un certo numero di documenti e, combinato con limit(), crea la paginazione.
  • 🧷 Tasti multipli: La funzione sort() accetta diversi campi, ordinando in base alla prima chiave e risolvendo i casi di parità con la successiva.
  • 🖨️ Readable Produzione: La funzione forEach(printjson) concatenata stampa ogni documento restituito in un formato JSON pulito.

MongoDB Query Sort() e Limit()

Che cosa sono le modifiche alle query?

Mongo DB fornisce modificatori di query come la clausola 'limit' e 'Orders' per fornire maggiore flessibilità durante l'esecuzione delle query. Daremo un'occhiata ai seguenti modificatori di query

MongoDB Limita i risultati della query

Questo modificatore è utilizzato per limitare il numero di documenti restituiti nel set di risultati per una query. L'esempio seguente mostra come ciò può essere fatto.

db.Employee.find().limit(2).forEach(printjson);

Code Spiegazione

  • Il codice precedente accetta la funzione find che restituisce tutti i documenti nella raccolta ma poi utilizza la clausola limite per limitare il numero di documenti restituiti a soli 2.

Uscita

Se il comando viene eseguito correttamente, verrà visualizzato il seguente output

MongoDB Limita i risultati della query

L'output mostra chiaramente che, poiché esiste un modificatore di limite, vengono restituiti al massimo solo 2 record come parte del set di risultati in base all'ObjectId in ordine crescente.

MongoDB Ordina per ordine discendente

È possibile specificare l'ordine dei documenti da restituire in base all'ordine ascendente o discendente di qualsiasi chiave nella raccolta. Il seguente esempio mostra come ciò può essere fatto.

db.Employee.find().sort({Employeeid:-1}).forEach(printjson)

Code Spiegazione

  • Il codice precedente accetta la funzione di ordinamento che restituisce tutti i documenti nella raccolta ma poi utilizza il modificatore per modificare l'ordine in cui vengono restituiti i record. Qui -1 indica che vogliamo restituire i documenti in base all'ordine decrescente dell'ID dipendente.

Se il comando viene eseguito correttamente, verrà visualizzato il seguente output

Uscita

MongoDB Ordina per ordine discendente

L'output mostra chiaramente i documenti restituiti in ordine decrescente dell'Employeeid.

L'ordine crescente è definito dal valore 1.

MongoDB Ordina per ordine crescente

Così come la funzione sort() può restituire i documenti in ordine decrescente, può anche restituirli in ordine crescente. L'ordine crescente è definito dal valore 1 nell'oggetto sort. Questo ordina i documenti dal valore più piccolo al più grande, il che è utile per elencare i record dal più vecchio al più recente o dalla A alla Z.

L'esempio seguente ordina tutti i documenti dei dipendenti in base all'ID dipendente in ordine crescente:

db.Employee.find().sort({Employeeid:1}).forEach(printjson)

Ecco come funziona la query:

  • La funzione find() recupera tutti i documenti presenti nella collezione Employee.
  • sort({Employeeid:1}) ordina i risultati in base al campo Employeeid, dall'ID più basso al più alto.
  • forEach(printjson) stampa ogni documento in formato JSON leggibile.

Quando si esegue questo comando, i documenti vengono visualizzati in ordine crescente di Employeeid. L'ordinamento crescente è anche quello predefinito, quindi lasciando il valore a 1 si ottiene un ordinamento dal più basso al più alto nel campo scelto. Per invertire il risultato, è sufficiente cambiare il valore da 1 a -1, ed è anche possibile concatenare limit() per restituire solo i primi record ordinati.

MongoDB Skip() per la paginazione

Il metodo skip() dice MongoDB per ignorare un determinato numero di documenti prima di restituire i rimanenti. Da sola, la funzione skip() è raramente utile, ma combinata con limit() crea la paginazione, consentendo di visualizzare i risultati una pagina alla volta.

L'esempio seguente salta i primi due dipendenti e restituisce i successivi due:

db.Employee.find().skip(2).limit(2).forEach(printjson)

Per creare una navigazione pagina per pagina, segui questo schema:

  1. Decidi le dimensioni della pagina, ad esempio 2 documenti per pagina.
  2. Moltiplica la dimensione della pagina per il numero di pagina meno uno per ottenere il valore di salto.
  3. Passa quel valore a skip() e la dimensione della pagina a limit().

Ad esempio, la pagina 1 utilizza skip(0).limit(2), la pagina 2 utilizza skip(2).limit(2) e la pagina 3 utilizza skip(4).limit(2). Aggiungi sempre anche un sort(), in modo che l'ordine dei documenti rimanga stabile tra le pagine. Nota che valori di skip molto grandi possono essere lenti su grandi collezioni, perché MongoDB Il sistema esegue comunque la scansione e scarta i documenti saltati; la paginazione basata su intervalli è più veloce su larga scala.

Ordina per più campi in MongoDB

MongoDB è possibile ordinare in base a più di un campo alla volta. Si elencano i campi nell'oggetto di ordinamento in ordine di priorità e MongoDB ordina in base al primo campo, poi usa il campo successivo per risolvere i casi di parità e così via.

L'esempio seguente ordina i dipendenti per nome in ordine crescente e, per i dipendenti con lo stesso nome, per ID dipendente in ordine decrescente:

db.Employee.find().sort({EmployeeName:1, Employeeid:-1}).forEach(printjson)

L'ordine delle chiavi nell'oggetto di ordinamento è importante: EmployeeName viene applicato per primo perché compare per primo. Questo ordinamento multi-chiave è utile per i report in cui si raggruppa in base a un campo e poi si ordina all'interno di ciascun gruppo. Per ottenere le migliori prestazioni su grandi raccolte di dati, si consiglia di creare un indice composto che corrisponda ai campi e alle direzioni di ordinamento utilizzati.

DOMANDE FREQUENTI

Senza sort(), MongoDB Restituisce i documenti in ordine naturale, che di solito rispecchia il loro ordine su disco e non è garantito. Per un ordine prevedibile, aggiungi sempre un sort() esplicito su un campo come _id.

Logicamente, MongoDB La funzione sort() viene sempre applicata prima di limit(), indipendentemente dall'ordine in cui vengono concatenate. Ciò significa che limit() restituisce i documenti in cima al risultato ordinato, non un sottoinsieme casuale che viene poi ordinato.

L'ordinamento di grandi insiemi di risultati senza un indice impone un ordinamento in memoria, che fallisce una volta superato il limite di memoria. La creazione di un indice sul campo di ordinamento consente MongoDB restituire risultati ordinati in modo efficiente.

L'intelligenza artificiale può trasformare una semplice richiesta come "i cinque dipendenti più recenti" in una query find().sort().limit() con la direzione e il conteggio corretti. Spiega inoltre ogni modificatore in modo che anche i principianti possano apprendere lo schema.

Sì. L'intelligenza artificiale può analizzare il piano di esecuzione di una query, rilevare gli ordinamenti in memoria e consigliare l'indice necessario per supportare l'ordinamento. Questo aiuta gli sviluppatori ad accelerare l'ordinamento e a limitare le query su grandi insiemi di dati.

Riassumi questo post con: