sql >> Databáze >  >> NoSQL >> MongoDB

2 způsoby, jak odkrýt index v MongoDB

Pokud máte v MongoDB skrytý index, můžete použít unhideIndex() nebo collMod příkaz administrace k jejímu zobrazení.

Příklady indexů

Podívejme se na indexy kolekce nazvané pets :

db.pets.getIndexes()

Výsledek:

[
	{
		"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"
	}
]

Vidíme, že existují tři indexy a poslední dva jsou skryté. Víme to, protože mají "hidden" : true v jejich definici.

Zrušte skrytí pomocí unhideIndexes() Metoda

První způsob, jak odkrýt index, je použít db.collection.unhideIndex() metoda. Tato metoda přijímá název indexu nebo jeho klíčový vzor jako parametr pro určení, který index se má odkrýt.

Příklad:

db.pets.unhideIndex("idx_weight_-1")

Výstup:

{ "hidden_old" : true, "hidden_new" : false, "ok" : 1 }

Výstup unhideIndex() metoda zobrazí starou hodnotu pro hidden pole (v tomto případě true ) a novou hodnotu (v tomto případě false ).

Pokud však odkryjeme již neskrytý index (nebo skryjeme již skrytý), tyto se nezobrazí a dostaneme pouze následující:

{ "ok" : 1 }

V každém případě je index nyní nekrytý.

unhideIndex() metoda je obal pro collMod administrační příkaz (níže).

collMod Příkaz

collMod administrační příkaz nám umožňuje přidávat možnosti do kolekce nebo upravovat definice zobrazení.

Můžeme jej použít k odkrytí indexu předáním hidden: false :

Příklad:

db.runCommand( {
   collMod: "pets",
   index: {
      name: "type_1",
      hidden: false
   }
} )

Výsledek:

{ "hidden_old" : true, "hidden_new" : false, "ok" : 1 }

To vrátí stejný dokument jako unhideIndex() vrátí.

Podobné jako unhideIndex() , máte možnost zadat název indexu nebo jeho klíčový vzor.

Zde je příklad použití vzoru klíče:

db.runCommand( {
   collMod: "pets",
   index: {
      keyPattern: { "type" : 1 },
      hidden: false
   }
} )

V tomto případě byl index definován pomocí { "type" : 1 } , a tak lze tuto definici použít místo názvu indexu.

Ověřte změny

Pro ověření našich změn můžeme zavolat getIndexes() znovu, abyste viděli definici indexu:

db.pets.getIndexes()

Výsledek:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"weight" : -1
		},
		"name" : "idx_weight_-1"
	},
	{
		"v" : 2,
		"key" : {
			"type" : 1
		},
		"name" : "type_1"
	}
]

Jak se očekávalo, oba indexy byly odkryty. Můžeme je také znovu skrýt předáním hidden: true .

Nelze skrýt/odkrýt indexy? Zkontrolujte toto nastavení.

mongod featureCompatibilityVersion musí být alespoň 4.4 než budete moci skrýt indexy. Jakmile je však index skrytý, zůstane skrytý i s featureCompatibilityVersion nastaveno na 4.2 na binárních souborech MongoDB 4.4.

Můžete zkontrolovat featureCompatibilityVersion nastavení pomocí následujícího kódu:

db.adminCommand( 
    { 
        getParameter: 1, 
        featureCompatibilityVersion: 1 
    } 
)

Můžete jej nastavit pomocí setFeatureCompatibilityVersion příkaz:

db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )

setFeatureCompatibilityVersion příkaz je třeba spustit v admin databáze.

Pamatujte také, že nemůžete skrýt _id index.


  1. Při spuštění květiny se zobrazí následující:dbm.error:typ db je dbm.gnu, ale modul není k dispozici

  2. phpredis na fedoře 12

  3. Jak mohu spustit MongoDB jako službu Windows?

  4. Vytvořte zástupný textový index v MongoDB