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

Lệnh MongoDB dropIndexes

MongoDB có một lệnh quản trị được gọi là dropIndexes làm giảm một hoặc nhiều chỉ mục (ngoại trừ chỉ mục trên _id trường) từ bộ sưu tập được chỉ định.

Chỉ mục mẫu

Giả sử chúng ta có một bộ sưu tập được gọi là posts với các chỉ mục sau:

db.pets.getIndexes()

Kết quả:

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

Trong trường hợp này, chúng tôi có bốn chỉ mục. Cái đầu tiên là chỉ mục mặc định cho _id đồng ruộng. Chỉ mục này được tạo tự động khi bạn tạo một bộ sưu tập và không thể bỏ chỉ mục này.

Ba chỉ mục khác có thể bị loại bỏ.

Thả một chỉ mục duy nhất

Để giảm một chỉ mục, hãy chuyển tên tập hợp, cũng như tên chỉ mục hoặc tài liệu đặc tả của nó.

Ví dụ:

db.runCommand( { dropIndexes: "posts", index: "title_1" })

Trong trường hợp này, chúng tôi đang chuyển tên chỉ mục.

Chạy điều đó dẫn đến kết quả sau:

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

Điều này cho chúng tôi biết rằng chỉ số đã bị giảm.

Ngoài ra, chúng tôi có thể đã sử dụng tài liệu đặc tả chỉ mục thay vì tên của nó, như sau:

db.runCommand( { dropIndexes: "posts", index: { "title" : 1 } })

Thả nhiều chỉ mục

Nếu bạn muốn bỏ nhiều chỉ mục (nhưng không phải tất cả indexes), chuyển tên chỉ mục vào một mảng.

Ví dụ:

db.runCommand( { 
  dropIndexes: "posts", 
  index: [ "tags_1", "body_text" ] 
})

Kết quả:

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

Ở giai đoạn này, hãy kiểm tra lại danh sách các chỉ mục của chúng tôi:

db.posts.getIndexes()

Kết quả:

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

Như dự kiến, ba chỉ mục đã bị xóa và chỉ còn lại một chỉ mục (và không thể xóa được).

Khi truyền một mảng, các chỉ mục văn bản chỉ có thể được loại bỏ bằng cách chỉ định tên chỉ mục. Trong những trường hợp như vậy, bạn không thể bỏ chỉ mục văn bản bằng cách chỉ định tài liệu đặc tả của chúng, giống như bạn có thể làm với các chỉ mục khác.

Bỏ tất cả các chỉ mục

Bạn có thể bỏ tất cả các chỉ mục bằng cách sử dụng ký tự đại diện dấu hoa thị (* ).

Đối với ví dụ này, tôi đã tạo lại các chỉ mục. Vì vậy, các chỉ mục trông như thế này ::

db.products.getIndexes()

Kết quả:

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

Bây giờ, hãy bỏ tất cả các chỉ mục cùng một lúc:

db.runCommand( { dropIndexes: "posts", index: "*" })

Kết quả:

{
	"nIndexesWas" : 4,
	"msg" : "non-_id indexes dropped for collection",
	"ok" : 1
}

Tất cả các chỉ mục đều bị loại trừ _id chỉ mục (không thể bỏ chỉ mục đó).

Hãy kiểm tra lại các chỉ mục.

db.products.getIndexes()

Kết quả:

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

Như mong đợi, _id chỉ mục là chỉ mục duy nhất còn lại.

Tài liệu MongoDB

Xem tài liệu MongoDB để biết thêm thông tin về dropIndexes lệnh.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Triển khai MongoDB bằng Docker

  2. Cách tối ưu hóa Truy vấn trong MongoDB bằng cách sử dụng $ in so với $ hoặc

  3. Cách tạo API RESTful tốt nhất trong Node.js

  4. Tạo chỉ mục văn bản với các trọng lượng trường khác nhau trong MongoDB

  5. Tạo mối quan hệ Khoá ngoại trong Mongoose