Nếu bạn có một chỉ mục ẩn trong MongoDB, bạn có thể sử dụng unhideIndex()
hoặc collMod
lệnh quản trị để hiện nó.
Chỉ mục mẫu
Hãy xem các chỉ mục trên bộ sưu tập có tên là pets
:
db.pets.getIndexes()
Kết quả:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "weight" : -1 }, "name" : "idx_weight_-1", "hidden" : true }, { "v" : 2, "hidden" : true, "key" : { "type" : 1 }, "name" : "type_1" } ]
Chúng ta có thể thấy rằng có ba chỉ mục và hai chỉ mục cuối cùng bị ẩn. Chúng tôi biết điều này vì họ có "hidden" : true
theo định nghĩa của họ.
Hiện bằng unhideIndexes()
Phương pháp
Cách đầu tiên để hiện một chỉ mục là sử dụng db.collection.unhideIndex()
phương pháp. Phương thức này chấp nhận tên của chỉ mục hoặc mẫu khóa của nó làm tham số để chỉ định chỉ mục nào cần bỏ ẩn.
Ví dụ:
db.pets.unhideIndex("idx_weight_-1")
Đầu ra:
{ "hidden_old" : true, "hidden_new" : false, "ok" : 1 }
Đầu ra của unhideIndex()
phương thức hiển thị giá trị cũ cho hidden
trường (trong trường hợp này là true
) và giá trị mới (trong trường hợp này là false
).
Tuy nhiên, nếu chúng tôi hiện một chỉ mục đã được hiển thị (hoặc ẩn một chỉ mục đã bị ẩn), những chỉ mục này sẽ không được hiển thị và chúng tôi chỉ nhận được những điều sau:
{ "ok" : 1 }
Trong mọi trường hợp, chỉ mục hiện đang được hiển thị.
unhideIndex()
phương thức là một trình bao bọc cho collMod
lệnh quản trị (bên dưới).
collMod
Lệnh
collMod
lệnh quản trị cho phép chúng tôi thêm các tùy chọn vào một bộ sưu tập hoặc sửa đổi các định nghĩa chế độ xem.
Chúng tôi có thể sử dụng nó để hiện một chỉ mục bằng cách chuyển hidden: false
:
Ví dụ:
db.runCommand( {
collMod: "pets",
index: {
name: "type_1",
hidden: false
}
} )
Kết quả:
{ "hidden_old" : true, "hidden_new" : false, "ok" : 1 }
Điều này trả về cùng một tài liệu unhideIndex()
lợi nhuận.
Tương tự với unhideIndex()
, bạn có tùy chọn chỉ định tên chỉ mục hoặc mẫu khóa của nó.
Dưới đây là một ví dụ về việc sử dụng mẫu khóa:
db.runCommand( {
collMod: "pets",
index: {
keyPattern: { "type" : 1 },
hidden: false
}
} )
Trong trường hợp này, chỉ mục được xác định bằng cách sử dụng { "type" : 1 }
và do đó định nghĩa này có thể được sử dụng thay cho tên chỉ mục.
Xác minh các thay đổi
Để xác minh các thay đổi của mình, chúng tôi có thể gọi getIndexes()
một lần nữa để xem định nghĩa của chỉ mục:
db.pets.getIndexes()
Kết quả:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "weight" : -1 }, "name" : "idx_weight_-1" }, { "v" : 2, "key" : { "type" : 1 }, "name" : "type_1" } ]
Như mong đợi, cả hai chỉ mục đã được hiển thị. Chúng tôi cũng có thể ẩn chúng lại bằng cách chuyển hidden: true
.
Không thể ẩn / hiện chỉ mục? Kiểm tra Cài đặt này.
mongod
featureCompatibilityVersion
ít nhất phải là 4.4
trước khi bạn có thể ẩn các chỉ mục. Tuy nhiên, sau khi bị ẩn, chỉ mục sẽ vẫn bị ẩn ngay cả với featureCompatibilityVersion
đặt thành 4.2 trên tệp nhị phân MongoDB 4.4.
Bạn có thể kiểm tra featureCompatibilityVersion
cài đặt bằng mã sau:
db.adminCommand(
{
getParameter: 1,
featureCompatibilityVersion: 1
}
)
Bạn có thể đặt nó bằng setFeatureCompatibilityVersion
lệnh:
db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )
setFeatureCompatibilityVersion
lệnh cần được chạy trong admin
cơ sở dữ liệu.
Cũng lưu ý, bạn không thể ẩn _id
chỉ mục.