Indizes in MongoDB anzeigen

Mehvish Ashiq 21 Juni 2022
  1. Verwenden Sie getIndexes(), um Indizes aus einer bestimmten Sammlung in MongoDB anzuzeigen
  2. Verwenden Sie forEach(), um Indizes aus allen Sammlungen in einer Datenbank in MongoDB anzuzeigen
  3. Indizes aus allen Sammlungen aller Datenbanken in MongoDB anzeigen
  4. Nur die text-Indizes aus allen Sammlungen aller Datenbanken in MongoDB anzeigen
Indizes in MongoDB anzeigen

Heute lernen wir, wie man Indizes aus einer Sammlung, allen Sammlungen einer Datenbank und allen Sammlungen aller Datenbanken anzeigt. Wir werden auch sehen, wie man den spezifischen Indextyp aus allen Sammlungen aller Datenbanken erhält.

Abhängig von den Projektanforderungen können wir eine der folgenden Möglichkeiten verwenden, um Indizes in MongoDB anzuzeigen. In diesem Tutorial gehen wir von spezifischen zu allgemeinen Lösungen über.

Verwenden Sie getIndexes(), um Indizes aus einer bestimmten Sammlung in MongoDB anzuzeigen

Beispielcode:

// MongoDB Version 5.0

> db.Client.getIndexes();

AUSGANG:

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

In der obigen Ausgabe sehen wir zwei Indizes, bei denen der Index für das Feld shopPosId vom Benutzer erstellt wird, während _id der Standardindex ist. Wenn Sie für eine bestimmte Sammlung keinen Index erstellt haben, sehen Sie nur die _id als Index.

Um sofortige Mongo-Shell-Unterstützung zu erhalten, können wir auch einen der unten angegebenen Befehle verwenden.

// MongoDB Version 5.0

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

Wir können auch die stats().indexSizes verwenden, um Indizes mit entsprechenden Größen aus einer bestimmten Sammlung anzuzeigen.

Beispielcode:

// MongoDB Version 5.0

> db.Client.stats().indexSizes

AUSGANG:

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

Verwenden Sie forEach(), um Indizes aus allen Sammlungen in einer Datenbank in MongoDB anzuzeigen

Beispielcode:

// 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);
});

AUSGANG:

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_" } ]

Dieser Beispielcode zeigt alle Indizes aus allen Sammlungen in einer aktuellen Datenbank. In diesem Codeausschnitt ruft die Methode getCollectionNames() alle Sammlungsnamen aus der ausgewählten Datenbank ab, die einzeln mit forEach() an eine anonyme Funktion übergeben werden.

Innerhalb von forEach() erhalten wir alle Indizes für die angegebene Sammlung und speichern sie im all_indexes-Objekt. Zum Schluss drucken wir mit printjson() das all_indexes-Objekt auf der Konsole (in unserem Fall die Mongo-Shell).

Indizes aus allen Sammlungen aller Datenbanken in MongoDB anzeigen

Beispielcode:

// 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)
   });
});

AUSGANG:

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_" } ]

Der oben angegebene Beispielcode wird über alle Datenbanken iterieren. In jeder Datenbank werden alle Sammlungen durchlaufen.

Und in jeder Sammlung erhält es alle Indizes und druckt sie mit ihren jeweiligen Datenbank- und Sammlungsnamen.

Im Folgenden finden Sie eine kurze Erläuterung aller Methoden, die wir für das obige Code-Snippet verwendet haben.

  1. adminCommand() – Es stellt den Helfer bereit, um die gegebenen Datenbankbefehle für die admin-Datenbank auszuführen, wobei der Datenbankkontext ignoriert wird, in dem es ausgeführt wird.
  2. getSiblingDB() – Wir verwenden diese Methode, um das Datenbankobjekt zurückzugeben, ohne die db-Variable in der Shell-Umgebung zu ändern.
  3. getCollectionInfos() – Wird verwendet, um das Array von Dokumenten zurückzugeben, das die Ansichts- oder Sammlungsinformationen enthält, zum Beispiel Optionen und Name für die ausgewählte Datenbank (aktuelle Datenbank). Denken Sie daran, dass die Ergebnisse, die wir erhalten, auf den Berechtigungen des Benutzers basieren.
  4. getCollection() – Es gibt ein Sammlungsobjekt für diesen Code zurück, obwohl es auch ein view-Objekt zurückgeben kann. Sie entspricht funktional der Syntax db.collection_name, aber wir verwenden diese Methode, um Zugriff auf verschiedene Sammlungsmethoden zu erhalten, zum Beispiel getIndexes(), das unten beschrieben wird.
  5. getIndexes() – Wir verwenden diese Methode, um ein Array zu erhalten, das eine Dokumentenliste enthält, die alle vorhandenen Indizes einer bestimmten Sammlung identifiziert und beschreibt, einschließlich der versteckten Indizes.

Gibt es eine Möglichkeit, versteckte Indizes für eine bestimmte Sammlung anzuzeigen? JAWOHL. Wir können sie mit den unten angegebenen listIndexes sehen.

Der Kunde ist hier der Sammlungsname. Sie können dies durch Ihren Sammlungsnamen ersetzen.

Beispielcode:

// MongoDB Version 5.0

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

AUSGANG:

{
        "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
}

Die obige Ausgabe enthält den firstBatch, der die Indexinformationen beschreibt, einschließlich der Schlüssel und Optionen, die zum Erstellen eines Index verwendet werden. Ab ab MongoDB 4.4 ist die index-Option hidden nur vorhanden, wenn ihr Wert true ist.

Nur die text-Indizes aus allen Sammlungen aller Datenbanken in MongoDB anzeigen

Beispielcode:

// 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);
          };
          });
      });
});

AUSGANG:

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
}

Dieses Codebeispiel ist dem vorherigen ähnlich, mit dem Unterschied, dass wir nur auf den text Typ Index aus allen Sammlungen aller Datenbanken abzielen.

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

Verwandter Artikel - MongoDB Index