2014-06-16 9 views
11

Ho usato mongorestore per ripristinare un database ma ricevo un errore indicante che l'indice esiste già quando provo a eseguire la mia applicazione.Eliminare tutti gli indici da tutte le raccolte in un database MongoDB utilizzando la riga di comando

Conosco la funzione db.collection.dropIndex() ma esiste un modo per automatizzarlo e rilasciare tutti gli indici da tutte le raccolte in un database contemporaneamente?

Ho provato

db.getCollectionNames().forEach(function(col_name) { 
    var coll = db.getCollection(col_name); 
    coll.dropIndexes(); 
}); 

Ma che non fa il trucco. Qualche idea?

+1

Quindi andare con db.dropDatabase; comando se vuoi iniziare con il nuovo database ... !!! – RubyOnRails

risposta

21

Il comando funziona per me (elimina tutti gli indici sul DB attualmente selezionato). Ma puoi anche usare questa alternativa.

db.getCollectionNames().forEach(function(collName) { 
    db.runCommand({dropIndexes: collName, index: "*"}); 
}); 

Quando eliminare gli indici verranno eliminati solo non _id indici.

Soluzione alternativa è eliminare il database e impostare il flag --noIndexRestore durante il ripristino con mongorestore in modo che gli indici non vengano ripristinati.

Da man mongorestore:

--noIndexRestore

Nuovo nella versione 2.2.

Impedisce al mongorestore di ripristinare e creare indici come specificato nell'output di mongodump corrispondente.

1

È possibile utilizzare questo comando per eliminare tutti gli indici di tutte le collezioni:

db.getCollectionNames().forEach(function (d) { 
    db[d].dropIndexes(); 
}); 

Prova questo!

Reference link

Problemi correlati