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

Napraw „nazwa indeksu musi być ciągiem” podczas upuszczania wielu indeksów w MongoDB

Jeśli napotkasz błąd „nazwa indeksu musi być ciągiem znaków” podczas upuszczania wielu indeksów w MongoDB, prawdopodobnie dlatego, że przekazujesz dokument specyfikacji zamiast nazwy.

Kiedy używasz dropIndexes() metody lub dropIndexes polecenie, aby usunąć wiele indeksów, musisz przekazać indeks nazwy (nie dokumenty specyfikacji) w tablicy.

Przykładowe indeksy

Załóżmy, że mamy następujące indeksy:

db.posts.getIndexes()

Wynik:

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

Kod problemu

Oto przykład kodu, który powoduje ten błąd:

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

Wynik:

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

W tym przykładzie próbuję usunąć dwa indeksy, przekazując ich dokumenty specyfikacji, ale pojawia się błąd. Zamiast tego muszę podać nazwy indeksów.

Rozwiązanie

Aby rozwiązać ten problem, wystarczy podać nazwy indeksów zamiast ich specyfikacji:

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

Wynik:

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

To mówi nam, że indeksy zostały pomyślnie usunięte.

Sprawdź wyniki

Możemy uruchomić getIndexes() ponownie, aby sprawdzić, czy indeksy już nie istnieją.

db.posts.getIndexes()

Wynik:

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

Oba indeksy zostały usunięte zgodnie z oczekiwaniami.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Usuń pole znalezione w dowolnej tablicy mongodb

  2. Problemy z MongoDB PHP UTF-8

  3. eksport agregatów mongoexport do pliku csv

  4. Przekazywany argument musi być ciągiem 24 znaków szesnastkowych - myślę, że tak jest

  5. Wstaw plik json do mongodb