Wenn Sie einen versteckten Index in MongoDB haben, können Sie den unhideIndex()
verwenden Methode oder die collMod
Administrationsbefehl, um es einzublenden.
Beispielindizes
Werfen wir einen Blick auf die Indizes einer Sammlung namens pets
:
db.pets.getIndexes()
Ergebnis:
[ { "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" } ]
Wir können sehen, dass es drei Indizes gibt und die letzten beiden ausgeblendet sind. Wir wissen das, weil sie "hidden" : true
haben in ihrer Definition.
Einblenden mit unhideIndexes()
Methode
Die erste Möglichkeit, einen Index einzublenden, ist die Verwendung von db.collection.unhideIndex()
Methode. Diese Methode akzeptiert den Namen des Index oder sein Schlüsselmuster als Parameter, um anzugeben, welcher Index eingeblendet werden soll.
Beispiel:
db.pets.unhideIndex("idx_weight_-1")
Ausgabe:
{ "hidden_old" : true, "hidden_new" : false, "ok" : 1 }
Die Ausgabe von unhideIndex()
Methode zeigt den alten Wert für hidden
an Feld (in diesem Fall true
) und den neuen Wert (in diesem Fall false
).
Wenn wir jedoch einen bereits eingeblendeten Index einblenden (oder einen bereits ausgeblendeten ausblenden), werden diese nicht angezeigt, und wir erhalten nur Folgendes:
{ "ok" : 1 }
In jedem Fall ist der Index jetzt eingeblendet.
Der unhideIndex()
Methode ist ein Wrapper für collMod
Verwaltungsbefehl (unten).
Der collMod
Befehl
Das collMod
Verwaltungsbefehl ermöglicht es uns, Optionen zu einer Sammlung hinzuzufügen oder Ansichtsdefinitionen zu ändern.
Wir können es verwenden, um einen Index sichtbar zu machen, indem wir hidden: false
übergeben :
Beispiel:
db.runCommand( {
collMod: "pets",
index: {
name: "type_1",
hidden: false
}
} )
Ergebnis:
{ "hidden_old" : true, "hidden_new" : false, "ok" : 1 }
Dies gibt dasselbe Dokument zurück wie unhideIndex()
zurück.
Ähnlich wie unhideIndex()
haben Sie die Möglichkeit, den Indexnamen oder sein Schlüsselmuster anzugeben.
Hier ist ein Beispiel für die Verwendung des Schlüsselmusters:
db.runCommand( {
collMod: "pets",
index: {
keyPattern: { "type" : 1 },
hidden: false
}
} )
In diesem Fall wurde der Index mit { "type" : 1 }
definiert , daher kann diese Definition anstelle des Indexnamens verwendet werden.
Überprüfen Sie die Änderungen
Um unsere Änderungen zu überprüfen, können wir getIndexes()
aufrufen erneut, um die Definition des Index zu sehen:
db.pets.getIndexes()
Ergebnis:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "weight" : -1 }, "name" : "idx_weight_-1" }, { "v" : 2, "key" : { "type" : 1 }, "name" : "type_1" } ]
Wie erwartet wurden beide Indizes eingeblendet. Wir können sie auch wieder ausblenden, indem wir hidden: true
übergeben .
Können Indizes nicht ein-/ausgeblendet werden? Überprüfen Sie diese Einstellung.
Der mongod
featureCompatibilityVersion
muss mindestens 4.4
sein bevor Sie Indizes ausblenden können. Ein einmal ausgeblendeter Index bleibt jedoch auch mit featureCompatibilityVersion
ausgeblendet auf MongoDB 4.4-Binärdateien auf 4.2 gesetzt.
Sie können die featureCompatibilityVersion
überprüfen Einstellung mit folgendem Code:
db.adminCommand(
{
getParameter: 1,
featureCompatibilityVersion: 1
}
)
Sie können es mit setFeatureCompatibilityVersion
festlegen Befehl:
db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )
Die setFeatureCompatibilityVersion
Der Befehl muss im admin
ausgeführt werden Datenbank.
Beachten Sie auch, dass Sie die _id
nicht ausblenden können index.