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

Поправете „името на индекса трябва да бъде низ“ при отпадане на множество индекси в MongoDB

Ако срещнете грешка „името на индекса трябва да бъде низ“ при изтриване на множество индекси в MongoDB, това вероятно е защото предавате документа със спецификации вместо името.

Когато използвате dropIndexes() метод или dropIndexes команда, за да премахнете множество индекси, трябва да предадете имена на индекса (не документите със спецификациите) в масив.

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

Да предположим, че имаме следните индекси:

db.posts.getIndexes()

Резултат:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"title" : 1
		},
		"name" : "title_1"
	},
	{
		"v" : 2,
		"key" : {
			"_fts" : "text",
			"_ftsx" : 1
		},
		"name" : "body_text",
		"weights" : {
			"body" : 1
		},
		"default_language" : "english",
		"language_override" : "language",
		"textIndexVersion" : 3
	}
]

Код на проблема

Ето пример за код, който причинява тази грешка:

db.posts.dropIndexes( [ 
  { "_fts" : "text", "_ftsx" : 1 }, 
  { "title" : 1 } 
] )

Резултат:

uncaught exception: Error: error dropping indexes : {
	"ok" : 0,
	"errmsg" : "dropIndexes krankykranes.posts (f9083c2c-8291-49d1-95f7-40711186db98) failed to drop multiple indexes [ { _fts: \"text\", _ftsx: 1.0 }, { title: 1.0 } ]: index name must be a string",
	"code" : 14,
	"codeName" : "TypeMismatch"
} :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/collection.js:692:11
@(shell):1:1

В този пример се опитвам да изтрия два индекса, като предам техните спецификационни документи, но получавам грешка. Вместо това трябва да предам имената на индексите.

Решение

За да разреша този проблем, просто трябва да предам имената на индексите вместо техния документ за спецификация:

db.posts.dropIndexes( [ 
  "body_text", 
  "title_1" 
] )

Резултат:

{ "nIndexesWas" : 3, "ok" : 1 }

Това ни казва, че индексите са отпаднали успешно.

Проверете резултатите

Можем да изпълним getIndexes() отново, за да проверите дали индексите вече не съществуват.

db.posts.getIndexes()

Резултат:

[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]

И двата индекса бяха премахнати според очакванията.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB сортиране()

  2. Запитване в Mongodb за месец, ден, година... на дата и час

  3. Премахнете вградения документ във вложен масив от документи

  4. MongoDB изтеглящ елемент от масив от колекция

  5. Разбиране на издръжливостта и безопасността при запис в MongoDB