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.