dropIndex() / dropIndexes() în MongoDB & NoSQL

dropIndex() șterge un index după nume sau după cheie; dropIndexes() le șterge pe toate, în afară de _id.

Sintaxă
db.colectie.dropIndex(<nume> | <cheie>)
db.colectie.dropIndexes()
db.colectie.hideIndex(<nume>)

Ce face dropIndex() / dropIndexes()

dropIndex('status_1_total_-1') șterge indexul cu acel nume; poți da și cheia ({ status: 1, total: -1 }). dropIndexes() fără argumente șterge toate indexurile colecției, mai puțin _id_, care nu poate fi șters.

Ca să afli sigur dacă un index mai e necesar, îl poți ascunde întâi cu hideIndex() (MongoDB 4.4+): rămâne actualizat la scrieri, dar planificatorul nu îl mai folosește. Dacă interogările nu încetinesc, îl ștergi; dacă da, îl readuci instant cu unhideIndex(), fără reconstruire.

Parametri

Parametru Descriere
nume | cheie Numele indexului (din getIndexes) sau documentul cheie.

Ce returnează

Un document cu nIndexesWas (numărul de indexuri dinainte) și ok: 1.

Exemple

Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.

use magazin
db.comenzi.insertMany([
  { _id: 1, client: 'Ana', oras: 'Iași', total: 120, status: 'livrata', produse: ['caiet', 'pix'] },
  { _id: 2, client: 'Dan', oras: 'Cluj', total: 85, status: 'noua', produse: ['carte'] },
  { _id: 3, client: 'Ioana', oras: 'Iași', total: 240, status: 'livrata', produse: ['rucsac', 'caiet', 'pix'] },
  { _id: 4, client: 'Mihai', oras: 'Brașov', total: 60, status: 'anulata', produse: [] }
])
db.comenzi.createIndex({ status: 1, total: -1 })
db.comenzi.createIndex({ client: 1 })

Exemplul 1: Ascunderea unui index înainte de ștergere

Întâi îl ascundem, ca să vedem dacă lipsa lui se simte.

db.comenzi.hideIndex('client_1')

Ieșire în mongosh

{ hidden_old: false, hidden_new: true, ok: 1 }

Exemplul 2: Ștergerea după nume

Colecția avea trei indexuri (_id_ și cele două create).

db.comenzi.dropIndex('status_1_total_-1')

Ieșire în mongosh

{ nIndexesWas: 3, ok: 1 }

Exemplul 3: Toate indexurile, în afară de _id

După exemplul 2 mai rămăseseră două indexuri; dropIndexes() îl păstrează doar pe _id_.

db.comenzi.dropIndexes()

Ieșire în mongosh

{
  nIndexesWas: 2,
  msg: 'non-_id indexes dropped for collection',
  ok: 1
}

Greșeli frecvente

  • Ștergerea unui index folosit de interogări frecvente poate încetini brusc aplicația; ascunde-l întâi cu hideIndex().
  • Pe un server cu replicare, rezultatul conține și câmpurile $clusterTime și operationTime; exemplele de aici sunt de pe un server de sine stătător.

Comenzi înrudite

  • getIndexes(): Listează indexurile unei colecții, cu câmpurile, numele și opțiunile fiecăruia (unique, expireAfterSeconds etc.).
  • Index compus: Un index compus pe mai multe câmpuri accelerează interogările care filtrează și sortează după aceste câmpuri, în ordinea lor.
  • drop() / dropDatabase(): drop() șterge definitiv o colecție cu documentele și indexurile ei; dropDatabase() șterge toată baza curentă.