2011-12-14 7 views

Respuesta

27

Respuesta corta: sí.

Los índices están cayendo en la caída de la colección. Necesitas recrear un índice.

Es posible que no desee dejar caer la colección, pero elimine todos los elementos con db.collection_name.remove({}). Tomará más recursos, pero deja tus índices. En realidad, tendrá que eliminar todos los datos de índice. Es por eso que es más preferible dejar caer toda la colección y volver a crear índices después de eso.

+1

¿Puedo crear un índice en una colección vacía? – raffian

+1

Sí, puedes. La colección se creará cuando crees el índice. –

+1

'remove()' puede llevar mucho tiempo en colecciones grandes. 'drop()' es mucho más rápido, pero tiene la desventaja de eliminar todos los índices, como ya se ha notado. – dcrosta

1

Al eliminar una colección, se eliminan todos los índices, como sospecha, por lo que cuando vuelva a crear la colección (explícita o implícitamente al agregar documentos nuevos) necesitará recrear los índices que necesite tener. El índice predeterminado en _id se crea automáticamente para usted.

+1

Ok, entendido, ¿hay algún problema al llamar a ensureIndex() varias veces en la misma colección si el índice ya existe? – raffian

+0

No hay daño. Impacto menor en el rendimiento para verificar si el índice que intentas asegurar ya está allí o no. –

7

Acabo de hacer esto en una colección con 10 índices y no quería volver a crearlos manualmente. Usted puede lograr una gota y recrear con índices con las siguientes tres líneas en la consola mongo:

var indexes = db.collection.getIndexKeys().splice(1) 
db.collection.drop(); 
indexes.forEach(function(el){ db.collection.ensureIndex(el, {background:true}); }) 

Esto no es lo suficientemente inteligente como para manejar los índices únicos o escasos, pero creo que sería bastante fácil de apoyar mediante el uso de la salida de getIndexes() en su lugar. No lo necesitaba, así que no lo hice.

El empalme (1) es solo para eliminar el índice en _id, ya que se creará automáticamente.

+0

muchas gracias, pero '{background: true}' borró mis índices, sin que funcione bien –

Cuestiones relacionadas