MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

2 начина за разкриване на индекс в MongoDB

Ако имате скрит индекс в MongoDB, можете да използвате unhideIndex() метод или collMod администраторска команда, за да го разкриете.

Примерни индекси

Нека да разгледаме индексите на колекция, наречена pets :

db.pets.getIndexes()

Резултат:

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

Виждаме, че има три индекса, а последните два са скрити. Знаем това, защото те имат "hidden" : true в тяхното определение.

Показване с помощта на unhideIndexes() Метод

Първият начин да разкриете индекс е да използвате db.collection.unhideIndex() метод. Този метод приема името на индекса или неговия ключов модел като параметър, за да посочи кой индекс да се покаже.

Пример:

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

Изход:

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

Резултатът от unhideIndex() method показва старата стойност за hidden поле (в този случай true ) и новата стойност (в този случай false ).

Ако обаче разкрием вече нескрит индекс (или скрием вече скрит), те не се показват и просто получаваме следното:

{ "ok" : 1 }

Във всеки случай индексът вече не е скрит.

unhideIndex() Методът е обвивка за collMod команда за администриране (по-долу).

collMod Команда

collMod Административната команда ни позволява да добавяме опции към колекция или да променяме дефинициите на изглед.

Можем да го използваме, за да разкрием индекс, като предадем hidden: false :

Пример:

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

Резултат:

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

Това връща същия документ, който unhideIndex() връща.

Подобно на unhideIndex() , имате възможност да посочите името на индекса или неговия ключов модел.

Ето пример за използване на ключовия модел:

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

В този случай индексът е дефиниран с помощта на { "type" : 1 } , така че тази дефиниция може да се използва вместо името на индекса.

Проверете промените

За да проверим нашите промени, можем да извикаме getIndexes() отново, за да видите дефиницията на индекса:

db.pets.getIndexes()

Резултат:

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

Както се очакваше и двата индекса бяха разкрити. Можем също да ги скрием отново, като предадем hidden: true .

Не можете да скриете/покажете индекси? Проверете тази настройка.

mongod featureCompatibilityVersion трябва да е най-малко 4.4 преди да можете да скриете индекси. Въпреки това, след като бъде скрит, индексът ще остане скрит дори с featureCompatibilityVersion зададен на 4.2 на MongoDB 4.4 двоични файлове.

Можете да проверите featureCompatibilityVersion настройка със следния код:

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

Можете да го настроите с помощта на setFeatureCompatibilityVersion команда:

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

setFeatureCompatibilityVersion командата трябва да се изпълни в admin база данни.

Също така имайте предвид, че не можете да скриете _id индекс.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Изтриването на (издърпване) на документ в масив от Mongoose не работи с ObjectID

  2. продължи в cursor.forEach()

  3. Удостоверяване на потребителя на флакона

  4. Задаване на време на изтичане на колекция в mongodb с помощта на mongoose

  5. Множество популации - mongoosejs