Mostrar índices en MongoDB
-
Utilice
getIndexes()
para mostrar índices de una colección específica en MongoDB -
Use
forEach()
para mostrar índices de todas las colecciones en una base de datos en MongoDB - Mostrar índices de todas las colecciones de todas las bases de datos en MongoDB
-
Mostrar los índices de
text
solo de todas las colecciones de todas las bases de datos 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.
adminCommand()
: proporciona el ayudante para ejecutar los comandos de la base de datos dados contra la base de datosadmin
ignorando el contexto de la base de datos en el que se ejecuta.getSiblingDB()
: usamos este método para devolver el objeto de la base de datos sin modificar la variabledb
en el entorno de shell.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.getCollection()
: devuelve un objeto de colección para este código, aunque también puede devolver un objeto vista. Es funcionalmente equivalente a la sintaxisdb.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.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.