MongoDB でインデックスを表示
-
MongoDB で
getIndexes()
を使用して特定のコレクションのインデックスを表示する -
MongoDB で
forEach()
を使用してデータベース内のすべてのコレクションのインデックスを表示する - MongoDB 内のすべてのデータベースのすべてのコレクションからのインデックスを表示する
-
MongoDB のすべてのデータベースのすべてのコレクションからのみ
テキスト
インデックスを表示する
今日は、1つのコレクション、データベースのすべてのコレクション、およびすべてのデータベースのすべてのコレクションからインデックスを表示する方法を学習します。また、すべてのデータベースのすべてのコレクションから特定のタイプのインデックスを取得する方法についても説明します。
プロジェクトの要件に応じて、次のいずれかの方法を使用して MongoDB にインデックスを表示できます。このチュートリアルでは、特定のソリューションから一般的なソリューションに移ります。
MongoDB で getIndexes()
を使用して特定のコレクションのインデックスを表示する
サンプルコード:
// MongoDB Version 5.0
> db.Client.getIndexes();
出力:
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
},
{
"v" : 2,
"key" : {
"shopPosId" : 1
},
"name" : "shopPosId_1"
}
]
上記の出力では、shopPosId
フィールドのインデックスがユーザー作成され、_id
がデフォルトのインデックスである 2つのインデックスを確認できます。特定のコレクションのインデックスを作成していない場合は、_id
のみがインデックスとして表示されます。
モンゴシェルの支援を即座に受けるために、以下に示すコマンドのいずれかを使用することもできます。
// MongoDB Version 5.0
> help;
> db.help();
> db.test.help();
stats().indexSizes
を使用して、特定のコレクションのそれぞれのサイズのインデックスを表示することもできます。
サンプルコード:
// MongoDB Version 5.0
> db.Client.stats().indexSizes
出力:
{ "_id_" : 36864, "shopPosId_1" : 20480 }
MongoDB で forEach()
を使用してデータベース内のすべてのコレクションのインデックスを表示する
サンプルコード:
// 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);
});
出力:
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_" } ]
このサンプルコードは、現在のデータベース内のすべてのコレクションのすべてのインデックスを示しています。このコードスニペットでは、getCollectionNames()
メソッドは、forEach()
を使用して匿名関数に一度に 1つずつ渡される、選択されたデータベースからすべてのコレクション名を取得します。
forEach()
内で、指定されたコレクションのすべてのインデックスを取得し、それらを all_indexes
オブジェクトに保存します。最後に、printjson()
を使用して、コンソール(この場合は mongo シェル)に all_indexes
オブジェクトを出力します。
MongoDB 内のすべてのデータベースのすべてのコレクションからのインデックスを表示する
サンプルコード:
// 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)
});
});
出力:
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_" } ]
上記のサンプルコードは、すべてのデータベースを繰り返し処理します。各データベースで、すべてのコレクションを繰り返し処理します。
そして、すべてのコレクションで、すべてのインデックスを取得し、それぞれのデータベースとコレクション名でそれらを出力します。
以下は、上記のコードスニペットに使用したすべてのメソッドの簡単な説明です。
adminCommand()
-実行するデータベースコンテキストを無視して、admin
データベースに対して指定されたデータベースコマンドを実行するヘルパーを提供します。getSiblingDB()
-このメソッドを使用して、シェル環境でdb
変数を変更せずにデータベースオブジェクトを返します。getCollectionInfos()
-選択したデータベース(現在のデータベース)のオプションや名前など、ビューまたはコレクション情報を含むドキュメントの配列を返すために使用されます。得られる結果はユーザーの特権に基づいていることを忘れないでください。getCollection()
-view オブジェクトを返すこともできますが、このコードのコレクションオブジェクトを返します。機能的にはdb.collection_name
構文と同等ですが、このメソッドを使用して、以下で説明するgetIndexes()
などのさまざまなコレクションメソッドにアクセスします。getIndexes()
-このメソッドを使用して、非表示のインデックスを含む、特定のコレクションの既存のすべてのインデックスを識別および説明するドキュメントのリストを保持する配列を取得します。
特定のコレクションの非表示のインデックスを表示する方法はありますか?はい。以下に示すように、listIndexes
を使用してそれらを確認できます。
ここで、クライアント
はコレクション名です。これをコレクション名に置き換えることができます。
サンプルコード:
// MongoDB Version 5.0
> db.runCommand (
{
listIndexes: "Client"
}
);
出力:
{
"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
}
上記の出力には、インデックスの作成に使用されるキーやオプションなど、インデックス情報を説明する firstBatch
が含まれています。MongoDB 4.4 以降の時点で、hidden インデックスオプションは、その値が true
の場合にのみ存在します。
MongoDB のすべてのデータベースのすべてのコレクションからのみテキスト
インデックスを表示する
サンプルコード:
// 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);
};
});
});
});
出力:
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
}
このコード例は、すべてのデータベースのすべてのコレクションからのみ text
タイプインデックスをターゲットにしている点を除いて、前のコード例と似ています。