Ако имате скрит индекс в MongoDB, можете да използвате unhideIndex() метод или collMod администраторска команда, за да го разкриете.
Примерни индекси
Нека да разгледаме индексите на колекция, наречена pets :
db.pets.getIndexes() Резултат:
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
},
{
"v" : 2,
"key" : {
"weight" : -1
},
"name" : "idx_weight_-1",
"hidden" : true
},
{
"v" : 2,
"hidden" : true,
"key" : {
"type" : 1
},
"name" : "type_1"
}
]
Виждаме, че има три индекса, а последните два са скрити. Знаем това, защото те имат "hidden" : true в тяхното определение.
Показване с помощта на unhideIndexes() Метод
Първият начин да разкриете индекс е да използвате db.collection.unhideIndex() метод. Този метод приема името на индекса или неговия ключов модел като параметър, за да посочи кой индекс да се покаже.
Пример:
db.pets.unhideIndex("idx_weight_-1") Изход:
{ "hidden_old" : true, "hidden_new" : false, "ok" : 1 }
Резултатът от unhideIndex() method показва старата стойност за hidden поле (в този случай true ) и новата стойност (в този случай false ).
Ако обаче разкрием вече нескрит индекс (или скрием вече скрит), те не се показват и просто получаваме следното:
{ "ok" : 1 } Във всеки случай индексът вече не е скрит.
unhideIndex() Методът е обвивка за collMod команда за администриране (по-долу).
collMod Команда
collMod Административната команда ни позволява да добавяме опции към колекция или да променяме дефинициите на изглед.
Можем да го използваме, за да разкрием индекс, като предадем hidden: false :
Пример:
db.runCommand( {
collMod: "pets",
index: {
name: "type_1",
hidden: false
}
} ) Резултат:
{ "hidden_old" : true, "hidden_new" : false, "ok" : 1 }
Това връща същия документ, който unhideIndex() връща.
Подобно на unhideIndex() , имате възможност да посочите името на индекса или неговия ключов модел.
Ето пример за използване на ключовия модел:
db.runCommand( {
collMod: "pets",
index: {
keyPattern: { "type" : 1 },
hidden: false
}
} )
В този случай индексът е дефиниран с помощта на { "type" : 1 } , така че тази дефиниция може да се използва вместо името на индекса.
Проверете промените
За да проверим нашите промени, можем да извикаме getIndexes() отново, за да видите дефиницията на индекса:
db.pets.getIndexes() Резултат:
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
},
{
"v" : 2,
"key" : {
"weight" : -1
},
"name" : "idx_weight_-1"
},
{
"v" : 2,
"key" : {
"type" : 1
},
"name" : "type_1"
}
]
Както се очакваше и двата индекса бяха разкрити. Можем също да ги скрием отново, като предадем hidden: true .
Не можете да скриете/покажете индекси? Проверете тази настройка.
mongod featureCompatibilityVersion трябва да е най-малко 4.4 преди да можете да скриете индекси. Въпреки това, след като бъде скрит, индексът ще остане скрит дори с featureCompatibilityVersion зададен на 4.2 на MongoDB 4.4 двоични файлове.
Можете да проверите featureCompatibilityVersion настройка със следния код:
db.adminCommand(
{
getParameter: 1,
featureCompatibilityVersion: 1
}
)
Можете да го настроите с помощта на setFeatureCompatibilityVersion команда:
db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )
setFeatureCompatibilityVersion командата трябва да се изпълни в admin база данни.
Също така имайте предвид, че не можете да скриете _id индекс.