Saltar al contenido

Comprobando si existe un índice en mongodb

Solución:

La creación de índices en MongoDB es una operación idempotente. Tan corriendo db.names.createIndex({name:1}) crearía el índice solo si aún no existiera.

El alias obsoleto (a partir de MongoDB 3.0) para createIndex () es asegurarIndex () que es un poco más claro sobre lo que createIndex() realmente lo hace.


Editar:
Gracias a ZitRo por aclarar en comentarios que llamar createIndex() con el mismo nombre pero diferentes opciones que un índice existente arrojará un error MongoError: Index with name: **indexName** already exists with different options como se explica en esta pregunta.


Si tiene otras razones para verificar, puede acceder a los datos del índice actual de dos maneras:

  1. A partir de la v3.0, podemos usar db.names.getIndexes() dónde names es el nombre de la colección. Documentos aquí.
  2. Antes de la v3.0, puede acceder al system.indexes colección y hacer una find como se describe a continuación en bri.

Usar db.system.indexes y busca en él.

Si, por ejemplo, tiene un índice llamado ‘indexname’, puede buscarlo así:

db.system.indexes.find({'name':'indexname'});

Si necesita buscar ese índice en una colección específica, entonces necesita usar la propiedad ns (y sería útil tener el nombre db).

db.system.indexes.find({'name':'indexname', 'ns':'dbname.collection'});

O, si odias absolutamente incluir el nombre de la base de datos …

db.system.indexes.find({'name':'indexname', 'ns': {$regex:'.collection$'}});

Juntando eso …

Entonces, ya terminaste, la verificación sería:

if(db.system.indexes.find({name:'indexname',ns:{$regex:'.collection$'}}).count()==0) { 
    db.collection.createIndex({blah:1},{name:'indexname'}) 
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *