Ако имате скрит индекс в 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
индекс.