Indizes in MongoDB anzeigen
-
Verwenden Sie
getIndexes()
, um Indizes aus einer bestimmten Sammlung in MongoDB anzuzeigen -
Verwenden Sie
forEach()
, um Indizes aus allen Sammlungen in einer Datenbank in MongoDB anzuzeigen - Indizes aus allen Sammlungen aller Datenbanken in MongoDB anzeigen
-
Nur die
text
-Indizes aus allen Sammlungen aller Datenbanken 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.
adminCommand()
– Es stellt den Helfer bereit, um die gegebenen Datenbankbefehle für dieadmin
-Datenbank auszuführen, wobei der Datenbankkontext ignoriert wird, in dem es ausgeführt wird.getSiblingDB()
– Wir verwenden diese Methode, um das Datenbankobjekt zurückzugeben, ohne diedb
-Variable in der Shell-Umgebung zu ändern.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.getCollection()
– Es gibt ein Sammlungsobjekt für diesen Code zurück, obwohl es auch ein view-Objekt zurückgeben kann. Sie entspricht funktional der Syntaxdb.collection_name
, aber wir verwenden diese Methode, um Zugriff auf verschiedene Sammlungsmethoden zu erhalten, zum BeispielgetIndexes()
, das unten beschrieben wird.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.