Mostrar índices en MongoDB

Mehvish Ashiq 30 enero 2023
  1. Utilice getIndexes() para mostrar índices de una colección específica en MongoDB
  2. Use forEach() para mostrar índices de todas las colecciones en una base de datos en MongoDB
  3. Mostrar índices de todas las colecciones de todas las bases de datos en MongoDB
  4. Mostrar los índices de text solo de todas las colecciones de todas las bases de datos en MongoDB
Mostrar índices en MongoDB

Hoy aprenderemos a mostrar índices de una colección, todas las colecciones de una base de datos y todas las colecciones de todas las bases de datos. También veremos cómo obtener el tipo específico de índices de todas las colecciones de todas las bases de datos.

Dependiendo de los requisitos del proyecto, podemos usar una de las siguientes formas de mostrar índices en MongoDB. En este tutorial, pasaremos de las soluciones específicas a las generales.

Utilice getIndexes() para mostrar índices de una colección específica en MongoDB

Código de ejemplo:

// MongoDB Version 5.0

> db.Client.getIndexes();

Producción :

[
        {
                "v" : 2,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_"
        },
        {
                "v" : 2,
                "key" : {
                        "shopPosId" : 1
                },
                "name" : "shopPosId_1"
        }
]

En el resultado anterior, podemos ver dos índices donde el índice para el campo shopPosId es creado por el usuario, mientras que _id es el índice predeterminado. Si no ha creado ningún índice para una colección específica, solo verá el _id como índice.

Para obtener asistencia instantánea de mongo shell, también podemos usar cualquiera de los comandos que se indican a continuación.

// MongoDB Version 5.0

> help;
> db.help();
> db.test.help();

También podemos usar stats().indexSizes para mostrar índices con los tamaños respectivos de una colección en particular.

Código de ejemplo:

// MongoDB Version 5.0

> db.Client.stats().indexSizes

Producción :

{ "_id_" : 36864, "shopPosId_1" : 20480 }

Use forEach() para mostrar índices de todas las colecciones en una base de datos en MongoDB

Código de ejemplo:

// MongoDB Version 5.0

> db.getCollectionNames().forEach(function(collection) {
      all_indexes = db.getCollection(collection).getIndexes();
      print("All Indexes for the " + collection + " collection:");
      printjson(all_indexes);
});

Producción :

All Indexes for the Client collection:
[
        {
                "v" : 2,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_"
        },
        {
                "v" : 2,
                "key" : {
                        "shopPosId" : 1
                },
                "name" : "shopPosId_1"
        }
]
All Indexes for the Shop collection:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
All Indexes for the collection1 collection:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
All Indexes for the collection2 collection:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
All Indexes for the employee collection:
[
        {
                "v" : 2,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_"
        },
        {
                "v" : 2,
                "key" : {
                        "_fts" : "text",
                        "_ftsx" : 1
                },
                "name" : "emp_code_text",
                "weights" : {
                        "emp_code" : 1
                },
                "default_language" : "english",
                "language_override" : "language",
                "textIndexVersion" : 3
        }
]
All Indexes for the printjson collection:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
All Indexes for the student_courses collection:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]

Este código de ejemplo muestra todos los índices de todas las colecciones en una base de datos actual. En este fragmento de código, el método getCollectionNames() recupera todos los nombres de colección de la base de datos seleccionada que se pasan a una función anónima de uno en uno utilizando forEach().

Dentro de forEach(), obtenemos todos los índices de la colección especificada y los guardamos en el objeto all_indexes. Finalmente, usamos printjson() para imprimir el objeto all_indexes en la consola (que es el shell mongo en nuestro caso).

Mostrar índices de todas las colecciones de todas las bases de datos en MongoDB

Código de ejemplo:

// MongoDB Version 5.0

> db.adminCommand("listDatabases").databases.forEach(function(database){
      let mdb = db.getSiblingDB(database.name);
      mdb.getCollectionInfos({ type: "collection" }).forEach(function(collection){
          let currentCollection = mdb.getCollection(collection.name);
          let all_indexes = currentCollection.getIndexes();
          print("All indexes on the " + database.name + "." + collection.name + ":");
          printjson(all_indexes)
   });
});

Producción :

All indexes on the admin.system.version:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
All indexes on the config.system.sessions:
[
        {
                "v" : 2,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_"
        },
        {
                "v" : 2,
                "key" : {
                        "lastUse" : 1
                },
                "name" : "lsidTTLIndex",
                "expireAfterSeconds" : 1800
        }
]
All indexes on the local.startup_log:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
All indexes on the test.Client:
[
        {
                "v" : 2,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_"
        },
        {
                "v" : 2,
                "key" : {
                        "shopPosId" : 1
                },
                "name" : "shopPosId_1"
        }
]
All indexes on the test.Shop:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
All indexes on the test.collection1:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
All indexes on the test.collection2:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
All indexes on the test.employee:
[
        {
                "v" : 2,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_"
        },
        {
                "v" : 2,
                "key" : {
                        "_fts" : "text",
                        "_ftsx" : 1
                },
                "name" : "emp_code_text",
                "weights" : {
                        "emp_code" : 1
                },
                "default_language" : "english",
                "language_override" : "language",
                "textIndexVersion" : 3
        }
]
All indexes on the test.printjson:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
All indexes on the test.student_courses:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]

El código de ejemplo proporcionado anteriormente iterará sobre todas las bases de datos. En cada base de datos, itera sobre todas las colecciones.

Y en cada colección, obtiene todos los índices y los imprime con sus respectivas bases de datos y nombres de colección.

A continuación, se incluye una breve explicación de todos los métodos que utilizamos para el fragmento de código anterior.

  1. adminCommand(): proporciona el ayudante para ejecutar los comandos de la base de datos dados contra la base de datos admin ignorando el contexto de la base de datos en el que se ejecuta.
  2. getSiblingDB(): usamos este método para devolver el objeto de la base de datos sin modificar la variable db en el entorno de shell.
  3. getCollectionInfos(): Se utiliza para devolver la matriz de documentos que contienen la vista o la información de la colección, por ejemplo, las opciones y el nombre de la base de datos seleccionada (base de datos actual). Recuerda que los resultados que obtenemos se basan en los privilegios del usuario.
  4. getCollection(): devuelve un objeto de colección para este código, aunque también puede devolver un objeto vista. Es funcionalmente equivalente a la sintaxis db.collection_name, pero estamos usando este método para obtener acceso a diferentes métodos de recopilación, por ejemplo, getIndexes(), que se describe a continuación.
  5. getIndexes(): usamos este método para obtener una matriz que contiene una lista de documentos que identifica y describe todos los índices existentes en una colección en particular, incluidos los índices ocultos.

¿Hay alguna forma de ver los índices ocultos de una colección en particular? SÍ. Podemos verlos usando los listIndexes, como se indica a continuación.

Aquí, el Cliente es el nombre de la colección. Puede reemplazar esto con el nombre de su colección.

Código de ejemplo:

// MongoDB Version 5.0

> db.runCommand (
   {
      listIndexes: "Client"
   }
);

Producción :

{
        "cursor" : {
                "id" : NumberLong(0),
                "ns" : "test.Client",
                "firstBatch" : [
                        {
                                "v" : 2,
                                "key" : {
                                        "_id" : 1
                                },
                                "name" : "_id_"
                        },
                        {
                                "v" : 2,
                                "key" : {
                                        "shopPosId" : 1
                                },
                                "name" : "shopPosId_1"
                        }
                ]
        },
        "ok" : 1
}

El resultado anterior contiene el firstBatch, que describe la información del índice, incluidas las claves y las opciones utilizadas para crear un índice. A partir de iniciar MongoDB 4.4, la opción de índice oculto solo está presente si su valor es true.

Mostrar los índices de text solo de todas las colecciones de todas las bases de datos en MongoDB

Código de ejemplo:

// MongoDB Version 5.0

> db.adminCommand("listDatabases").databases.forEach(function(database){
      let mdb = db.getSiblingDB(database.name);
      mdb.getCollectionInfos({ type: "collection" }).forEach(function(collection){
          let currentCollection = mdb.getCollection(collection.name);
          currentCollection.getIndexes().forEach(function(index){
          let indexValues = Object.values(Object.assign({}, index.key));

          if (indexValues.includes("text")) {
              print("Text index: " + index.name + " on the " +
                  database.name + "." + collection.name);
              printjson(index);
          };
          });
      });
});

Producción :

Text index: emp_code_text on the test.employee
{
        "v" : 2,
        "key" : {
                "_fts" : "text",
                "_ftsx" : 1
        },
        "name" : "emp_code_text",
        "weights" : {
                "emp_code" : 1
        },
        "default_language" : "english",
        "language_override" : "language",
        "textIndexVersion" : 3
}

Este ejemplo de código es similar al anterior, excepto por la diferencia de que apuntamos al texto índice de tipo solo de todas las colecciones de todas las bases de datos.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Artículo relacionado - MongoDB Index