MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

3 sposoby na ukrycie indeksu w planie zapytań w MongoDB

Począwszy od MongoDB 4.4, możemy teraz ukrywać indeksy z planu zapytań. Pozwala nam to ocenić potencjalny wpływ porzucenia indeksu bez faktycznego porzucania indeksu.

Jeśli ukrycie go ma negatywny wpływ, możemy odkryć indeks. Dzięki temu nie musimy usuwać indeksu, a następnie tworzyć go ponownie.

Poniżej znajdują się 3 sposoby na ukrycie indeksu w MongoDB.

hideIndex() Metoda

db.collection.hideIndex() metoda robi dokładnie to, co obiecuje – ukrywa indeks (przed planerem zapytań).

Przykład:

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

Wyjście:

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

To ukrywa indeks o nazwie idx_weight_-1 na pets kolekcja. Moglibyśmy alternatywnie podać wzorzec klucza dla indeksu zamiast nazwy.

Wyjście hideIndex() metoda wyświetla starą wartość dla hidden pole (w tym przypadku false ) i nową wartość (w tym przypadku true ).

Jeśli jednak ukryjemy już ukryty indeks (lub odkryjemy już nieukryty), nie są one wyświetlane, a otrzymujemy po prostu:

{ "ok" : 1 }

W każdym razie indeks jest teraz ukryty.

hideIndex() metoda jest w rzeczywistości opakowaniem dla collMod polecenie administracyjne (poniżej).

collMod Polecenie

collMod Polecenie administracyjne pozwala nam dodawać opcje do kolekcji lub modyfikować definicje widoków.

Możemy go użyć do ukrycia indeksu, przekazując hidden: true .

Przykład:

db.runCommand( {
   collMod: "pets",
   index: {
      name: "idx_weight_-1",
      hidden: true
   }
} )

Wynik:

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

Zwraca ten sam dokument co hideIndex() powraca.

Podobne do hideIndex() , masz możliwość określenia nazwy indeksu lub jego wzorca klucza.

Oto przykład użycia wzorca klucza:

db.runCommand( {
   collMod: "pets",
   index: {
      keyPattern: { weight : -1 },
      hidden: true
   }
} )

W tym przypadku indeks został zdefiniowany za pomocą { weight : -1 } , więc ta definicja może być używana zamiast nazwy indeksu.

Aby to sprawdzić, możemy użyć getIndexes() aby zobaczyć definicję indeksu:

db.pets.getIndexes()

Wynik:

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

Możemy również odkryć indeks, podając hidden: false .

Utwórz ukryty indeks

Trzecim sposobem ukrycia indeksu jest utworzenie go jako indeksu ukrytego.

Aby to zrobić, użyj hidden: true jako jedna z opcji podczas tworzenia indeksu.

Przykład:

db.pets.createIndex( 
    { type: 1 },
    { hidden: true }
)

Wyjście:

{
	"createdCollectionAutomatically" : false,
	"numIndexesBefore" : 2,
	"numIndexesAfter" : 3,
	"ok" : 1
}

Teraz wywołajmy getIndexes() ponownie, aby sprawdzić nasz nowo utworzony ukryty indeks:

db.pets.getIndexes()

Wynik:

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

Widzimy, że został utworzony za pomocą "hidden": true .

Nie możesz ukryć indeksów? Sprawdź to ustawienie.

mongod featureCompatibilityVersion musi mieć co najmniej 4.4 zanim będzie można ukryć indeksy. Jednak po ukryciu indeks pozostanie ukryty nawet w przypadku featureCompatibilityVersion ustawiony na 4.2 w plikach binarnych MongoDB 4.4.

Możesz sprawdzić featureCompatibilityVersion ustawienie z następującym kodem:

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

Możesz to ustawić za pomocą setFeatureCompatibilityVersion polecenie:

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

setFeatureCompatibilityVersion polecenie musi być uruchomione w admin baza danych.

Pamiętaj też, że nie możesz ukryć _id indeks.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose TypeError:użytkownik nie jest konstruktorem

  2. $project:Czy można uzyskać dostęp do właściwości wyniku wyrażenia tylko w jednym etapie?

  3. Nie udało się uruchomić aplikacji (port 8080) niedostępny

  4. 10 najważniejszych funkcji Atlasu MongoDB

  5. Jak używać agregacji w mongodb do $match _id