Afficher les index dans MongoDB
-
Utilisez
getIndexes()
pour afficher les index d’une collection spécifique dans MongoDB -
Utilisez
forEach()
pour afficher les index de toutes les collections dans une base de données dans MongoDB - Afficher les index de toutes les collections de toutes les bases de données dans MongoDB
-
Afficher les index
texte
uniquement de toutes les collections de toutes les bases de données dans MongoDB
Aujourd’hui, nous allons apprendre à afficher les index d’une collection, toutes les collections d’une base de données et toutes les collections de toutes les bases de données. Nous verrons également comment obtenir le type spécifique d’index de toutes les collections de toutes les bases de données.
Selon les exigences du projet, nous pouvons utiliser l’une des méthodes suivantes pour afficher les index dans MongoDB. Dans ce tutoriel, nous allons passer des solutions spécifiques aux solutions générales.
Utilisez getIndexes()
pour afficher les index d’une collection spécifique dans MongoDB
Exemple de code :
// MongoDB Version 5.0
> db.Client.getIndexes();
PRODUCTION:
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
},
{
"v" : 2,
"key" : {
"shopPosId" : 1
},
"name" : "shopPosId_1"
}
]
Dans la sortie ci-dessus, nous pouvons voir deux index où l’index du champ shopPosId
est créé par l’utilisateur tandis que _id
est l’index par défaut. Si vous n’avez pas créé d’index pour une collection spécifique, vous ne verrez que le _id
comme index.
Pour obtenir une assistance instantanée du shell mongo, nous pouvons également utiliser l’une des commandes indiquées ci-dessous.
// MongoDB Version 5.0
> help;
> db.help();
> db.test.help();
Nous pouvons également utiliser stats().indexSizes
pour afficher les index avec les tailles respectives d’une collection particulière.
Exemple de code :
// MongoDB Version 5.0
> db.Client.stats().indexSizes
PRODUCTION:
{ "_id_" : 36864, "shopPosId_1" : 20480 }
Utilisez forEach()
pour afficher les index de toutes les collections dans une base de données dans MongoDB
Exemple de code :
// 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);
});
PRODUCTION:
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_" } ]
Cet exemple de code affiche tous les index de toutes les collections d’une base de données actuelle. Dans cet extrait de code, la méthode getCollectionNames()
récupère tous les noms de collection de la base de données sélectionnée qui sont passés à une fonction anonyme un par un en utilisant forEach()
.
À l’intérieur de forEach()
, nous obtenons tous les index de la collection spécifiée et les enregistrons dans l’objet all_indexes
. Enfin, nous utilisons le printjson()
pour imprimer l’objet all_indexes
sur la console (qui est le shell mongo dans notre cas).
Afficher les index de toutes les collections de toutes les bases de données dans MongoDB
Exemple de code :
// 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)
});
});
PRODUCTION:
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_" } ]
L’exemple de code donné ci-dessus itérera sur toutes les bases de données. Dans chaque base de données, il itère sur toutes les collections.
Et dans chaque collection, il récupère tous les index et les imprime avec leurs noms de base de données et de collection respectifs.
Voici une brève explication de toutes les méthodes que nous avons utilisées pour l’extrait de code ci-dessus.
adminCommand()
- Il fournit l’assistant pour exécuter les commandes de base de données données sur la base de donnéesadmin
en ignorant le contexte de la base de données dans laquelle il s’exécute.getSiblingDB()
- Nous utilisons cette méthode pour renvoyer l’objet de la base de données sans modifier la variabledb
dans l’environnement shell.getCollectionInfos()
- Il est utilisé pour renvoyer le tableau de documents contenant les informations de vue ou de collection, par exemple, les options et le nom de la base de données sélectionnée (base de données actuelle). N’oubliez pas que les résultats que nous obtenons sont basés sur les privilèges de l’utilisateur.getCollection()
- Il renvoie un objet de collection pour ce code bien qu’il puisse également renvoyer un objet view. Elle est fonctionnellement équivalente à la syntaxedb.collection_name
, mais nous utilisons cette méthode pour accéder à différentes méthodes de collecte, par exemple,getIndexes()
qui est décrit ci-dessous.getIndexes()
- Nous utilisons cette méthode pour obtenir un tableau contenant une liste de documents qui identifie et décrit tous les index existants sur une collection particulière, y compris les index cachés.
Existe-t-il un moyen de voir les index cachés pour une collection particulière ? OUI. Nous pouvons les voir en utilisant les listIndexes
, comme indiqué ci-dessous.
Ici, le Client
est le nom de la collection. Vous pouvez le remplacer par le nom de votre collection.
Exemple de code :
// MongoDB Version 5.0
> db.runCommand (
{
listIndexes: "Client"
}
);
PRODUCTION:
{
"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
}
La sortie ci-dessus contient le firstBatch
, qui décrit les informations d’index, y compris les clés et les options utilisées pour créer un index. Depuis à partir de MongoDB 4.4, l’option index hidden n’est présente que si sa valeur est true
.
Afficher les index texte
uniquement de toutes les collections de toutes les bases de données dans MongoDB
Exemple de code :
// 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);
};
});
});
});
PRODUCTION:
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
}
Cet exemple de code est similaire au précédent à la différence près que nous ciblons le text
index de type uniquement à partir de toutes les collections de toutes les bases de données.