MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Sửa lỗi "tên chỉ mục phải là một chuỗi" khi thả nhiều chỉ mục trong MongoDB

Nếu bạn gặp lỗi "tên chỉ mục phải là một chuỗi" khi bỏ nhiều chỉ mục trong MongoDB, thì có thể là do bạn đang chuyển tài liệu thông số kỹ thuật thay vì tên.

Khi bạn sử dụng dropIndexes() hoặc dropIndexes lệnh để thả nhiều chỉ mục, bạn cần chuyển các chỉ mục tên (không phải tài liệu thông số kỹ thuật) trong một mảng.

Chỉ mục mẫu

Giả sử chúng ta có các chỉ mục sau:

db.posts.getIndexes()

Kết quả:

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

Mã sự cố

Dưới đây là một ví dụ về mã gây ra lỗi này:

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

Kết quả:

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

Trong ví dụ này, tôi đang cố gắng xóa hai chỉ mục bằng cách chuyển các tài liệu đặc tả của chúng, nhưng tôi gặp lỗi. Thay vào đó, tôi cần chuyển các tên chỉ mục.

Giải pháp

Để khắc phục sự cố này, tôi chỉ cần chuyển các tên chỉ mục thay vì tài liệu đặc tả của chúng:

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

Kết quả:

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

Điều đó cho chúng tôi biết rằng các chỉ mục đã bị loại bỏ thành công.

Kiểm tra kết quả

Chúng ta có thể chạy getIndexes() một lần nữa để xác minh rằng các chỉ mục không còn tồn tại.

db.posts.getIndexes()

Kết quả:

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

Cả hai chỉ mục đã bị giảm như mong đợi.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm thế nào để thực hiện các hoạt động mongodb thô trong mongoose?

  2. Làm cách nào để triển khai lược đồ này trong MongoDB?

  3. MongoDB và C #:Tìm kiếm không phân biệt chữ hoa chữ thường

  4. Cách đơn giản để tạo mã với Mongoose và Node.js và Underscore?

  5. MongoDB $ push