MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

2 Möglichkeiten, einen Index in MongoDB einzublenden

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.