Afficher les index dans MongoDB

Mehvish Ashiq 30 janvier 2023
  1. Utilisez getIndexes() pour afficher les index d’une collection spécifique dans MongoDB
  2. Utilisez forEach() pour afficher les index de toutes les collections dans une base de données dans MongoDB
  3. Afficher les index de toutes les collections de toutes les bases de données dans MongoDB
  4. Afficher les index texte uniquement de toutes les collections de toutes les bases de données dans MongoDB
Afficher les index 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.

  1. adminCommand() - Il fournit l’assistant pour exécuter les commandes de base de données données sur la base de données admin en ignorant le contexte de la base de données dans laquelle il s’exécute.
  2. getSiblingDB() - Nous utilisons cette méthode pour renvoyer l’objet de la base de données sans modifier la variable db dans l’environnement shell.
  3. 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.
  4. getCollection() - Il renvoie un objet de collection pour ce code bien qu’il puisse également renvoyer un objet view. Elle est fonctionnellement équivalente à la syntaxe db.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.
  5. 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.

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