MongoDBでインデックスを作成するときに、その名前を指定しない場合、MongoDBがインデックスを割り当てます。
デフォルト名は、そのフィールドのキー値と連結された各インデックス付きフィールド名で構成されます。たとえば、並べ替え順序、またはtext
の場合 インデックス、文字列_text
、または2dsphere
の場合 インデックス、文字列_2dsphere
、など。
ただし、MongoDBでインデックスを作成するときに独自の名前を割り当てることができます。
デフォルト名
次のようなインデックスを作成するとします。
db.employees.createIndex(
{
name: 1,
salary: -1 }
)
名前を指定しなかったため、MongoDBはインデックスの指定に基づいて名前を自動的に生成します。
getIndexes()
を使用します これを確認するには:
db.employees.getIndexes()
結果:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "name" : 1, "salary" : -1 }, "name" : "name_1_salary_-1" } ]
ここには2つのインデックスがあります。最初のものはデフォルトの_id
です コレクションで自動的に作成されるインデックス。 2つ目は、先ほど作成したものです。
この場合、MongoDBはインデックスにname_1_salary_-1
という名前を付けました。 。
このインデックスを削除する必要がある場合は、その名前または定義を覚えておく必要があります。デフォルトの名前は定義に基づいているため、より複雑な定義を使用すると、少し扱いにくくなる可能性があります。
いずれにせよ、上記のインデックスを次のように削除できます:
db.employees.dropIndex("name_1_salary_-1")
名前を指定
インデックスに独自の名前を作成したい場合は、次のように作成できます。
db.employees.createIndex(
{
name: 1,
salary: -1
},
{
name: "employee_salary"
}
)
name
を追加するだけでした インデックスのオプションを提供するためのオプションのドキュメント内のフィールド。
インデックスを確認すると、指定した名前であることがわかります。
db.employees.getIndexes()
結果:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "name" : 1, "salary" : -1 }, "name" : "employee_salary" } ]
他のオプションで名前を含める
前の例では、name
フィールドは、インデックスを作成するときに提供した唯一のオプションです。インデックスに指定できるオプションは名前だけではありません。
デフォルトの言語、言語のオーバーライドなど、他のオプションを提供することもできます。他のオプションは、同じドキュメント内でカンマで区切る必要があります。
他の2つのオプションを使用して(ただし名前を指定せずに)インデックスを作成する例を次に示します。
db.sitcoms.createIndex(
{
"original_name": "text",
"translations.sitcom_name": "text"
},
{
"default_language": "danish",
"language_override": "sprog"
}
)
これは、前のコレクションとは異なるコレクションの異なるインデックスです。ただし、独自のdefault_language
を指定していることがわかります。 およびlanguage_override
値。複合インデックスでもあります(複数のフィールドを含むインデックスです)。
名前を指定しなかったので、そのようなインデックスで名前がどのくらいの長さになるかを確認できます:
db.employees.getIndexes()
結果:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "original_name_text_translations.sitcom_name_text", "default_language" : "danish", "language_override" : "sprog", "weights" : { "original_name" : 1, "translations.sitcom_name" : 1 }, "textIndexVersion" : 3 } ]
したがって、この場合、MongoDBはインデックスにoriginal_name_text_translations.sitcom_name_text
のデフォルト名を付けました。 、それはインデックス定義から派生しているためです。
このインデックスを名前で削除するには、次のコードを使用する必要があります。
db.sitcoms.dropIndex("original_name_text_translations.sitcom_name_text")
このようなインデックスに名前を含めるために、デフォルトの言語と言語オーバーライドを指定するために使用したのと同じドキュメントで名前を提供できます。
したがって、次のようなインデックスを作成できます:
db.sitcoms.createIndex(
{
"original_name": "text",
"translations.sitcom_name": "text"
},
{
"default_language": "danish",
"language_override": "sprog",
"name": "sitcoms_da"
}
)
この場合、sitcoms_da
を使用しました インデックス名として。
これで、インデックスのリストを取得すると、指定した名前が表示されます:
db.sitcoms.getIndexes()
結果:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "sitcoms_da", "default_language" : "danish", "language_override" : "sprog", "weights" : { "original_name" : 1, "translations.sitcom_name" : 1 }, "textIndexVersion" : 3 } ]