sql >> Databasteknik >  >> NoSQL >> MongoDB

2 sätt att visa ett index i MongoDB

Om du har ett dolt index i MongoDB kan du använda unhideIndexes() metoden eller collMod administrationskommando för att visa det.

Exempelindex

Låt oss ta en titt på indexen för en samling som heter pets :

db.pets.getIndexes()

Resultat:

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

Vi kan se att det finns tre index, och de två sista är dolda. Vi vet detta eftersom de har "hidden" : true i deras definition.

Visa med unhideIndexes() Metod

Det första sättet att visa ett index är att använda db.collection.unhideIndex() metod. Denna metod accepterar namnet på indexet eller dess nyckelmönster som en parameter för att ange vilket index som ska visas.

Exempel:

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

Utdata:

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

Utdata från unhideIndexes() metoden visar det gamla värdet för hidden fältet (i det här fallet true ) och det nya värdet (i det här fallet false ).

Men om vi visar ett redan dolt index (eller döljer ett redan dolt) visas dessa inte, och vi får bara följande:

{ "ok" : 1 }

Hur som helst är indexet nu odollat.

unhideIndexes() metoden är ett omslag för collMod administrationskommando (nedan).

collMod Kommando

collMod administrationskommandot gör det möjligt för oss att lägga till alternativ till en samling eller att ändra vydefinitioner.

Vi kan använda den för att visa ett index genom att skicka hidden: false :

Exempel:

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

Resultat:

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

Detta returnerar samma dokument som unhideIndexes() returnerar.

Liknar unhideIndexes() , har du möjlighet att ange indexnamnet eller dess nyckelmönster.

Här är ett exempel på hur du använder nyckelmönstret:

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

I det här fallet definierades indexet med { "type" : 1 } , och så denna definition kan användas istället för indexnamnet.

Verifiera ändringarna

För att verifiera våra ändringar kan vi anropa getIndexes() igen för att se indexets definition:

db.pets.getIndexes()

Resultat:

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

Som väntat har båda indexen varit odolda. Vi kan också dölja dem igen genom att skicka hidden: true .

Kan du inte dölja/visa index? Kontrollera den här inställningen.

mongod featureCompatibilityVersion måste vara minst 4.4 innan du kan dölja index. Men när det väl är dolt kommer ett index att förbli dolt även med featureCompatibilityVersion inställd på 4.2 på MongoDB 4.4 binärer.

Du kan kontrollera featureCompatibilityVersion inställning med följande kod:

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

Du kan ställa in den med setFeatureCompatibilityVersion kommando:

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

setFeatureCompatibilityVersion kommandot måste köras i admin databas.

Observera också att du inte kan dölja _id index.


  1. zmq vs redis för pub-sub-mönster

  2. Mongoose find() RegExp för fältet nummertyp

  3. Varför redis inte kan ställa in maximalt öppen fil

  4. Argument som skickas in måste vara en enda sträng på 12 byte