Khi bạn tạo một chỉ mục trong MongoDB, nếu bạn không chỉ định tên cho nó, MongoDB sẽ chỉ định một chỉ mục.
Tên mặc định bao gồm mỗi tên trường được lập chỉ mục được nối với giá trị khóa cho trường đó. Ví dụ:thứ tự sắp xếp hoặc nếu đó là text
chỉ mục, chuỗi _text
hoặc nếu đó là 2dsphere
chỉ mục, chuỗi _2dsphere
, v.v.
Nhưng bạn có thể chỉ định tên của riêng mình khi tạo chỉ mục trong MongoDB.
Tên mặc định
Giả sử chúng ta tạo một chỉ mục như thế này:
db.employees.createIndex(
{
name: 1,
salary: -1 }
)
Chúng tôi không chỉ định tên, vì vậy MongoDB sẽ tự động tạo một tên, dựa trên đặc tả chỉ mục.
Chúng tôi sử dụng getIndexes()
để xác minh điều này:
db.employees.getIndexes()
Kết quả:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "name" : 1, "salary" : -1 }, "name" : "name_1_salary_-1" } ]
Có hai chỉ mục ở đây. Cái đầu tiên là _id
mặc định chỉ mục được tạo tự động với bộ sưu tập. Cái thứ hai là cái mà chúng tôi vừa tạo.
Trong trường hợp này, MongoDB đã đặt tên cho chỉ mục là name_1_salary_-1
.
Nếu chúng ta cần loại bỏ chỉ mục này, chúng ta sẽ cần phải nhớ tên hoặc định nghĩa của nó. Với tên mặc định dựa trên định nghĩa, nó có thể hơi khó sử dụng nếu bạn có một định nghĩa phức tạp hơn.
Trong mọi trường hợp, chúng ta có thể giảm chỉ số trên như thế này:
db.employees.dropIndex("name_1_salary_-1")
Chỉ định tên
Nếu chúng tôi muốn tạo tên riêng của mình cho chỉ mục, chúng tôi có thể tạo nó như thế này:
db.employees.createIndex(
{
name: 1,
salary: -1
},
{
name: "employee_salary"
}
)
Tất cả những gì chúng tôi đã làm là thêm một name
trong một tài liệu tùy chọn để cung cấp các tùy chọn cho chỉ mục.
Nếu bây giờ chúng ta kiểm tra chỉ mục, chúng ta có thể thấy rằng nó có tên mà chúng ta đã cung cấp:
db.employees.getIndexes()
Kết quả:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "name" : 1, "salary" : -1 }, "name" : "employee_salary" } ]
Bao gồm tên với các tùy chọn khác
Trong ví dụ trước, name
trường là tùy chọn duy nhất mà chúng tôi đã cung cấp khi tạo chỉ mục. Tên không phải là tùy chọn duy nhất bạn có thể chỉ định cho một chỉ mục.
Bạn cũng có thể cung cấp các tùy chọn khác, chẳng hạn như ngôn ngữ mặc định, ghi đè ngôn ngữ, v.v. Mọi tùy chọn khác sẽ cần được bao gồm trong cùng một tài liệu, được phân tách bằng dấu phẩy.
Dưới đây là một ví dụ về cách tạo chỉ mục với hai tùy chọn khác (nhưng không chỉ định tên):
db.sitcoms.createIndex(
{
"original_name": "text",
"translations.sitcom_name": "text"
},
{
"default_language": "danish",
"language_override": "sprog"
}
)
Đây là một chỉ mục khác trên một tập hợp khác với chỉ mục trước đó. Nhưng bạn có thể thấy rằng chúng tôi đã chỉ định default_language
của riêng mình và language_override
các giá trị. Nó cũng là một chỉ mục kết hợp (nó là một chỉ mục bao gồm nhiều trường).
Tôi không chỉ định tên, vì vậy chúng tôi có thể xem tên đó có trong bao lâu với một chỉ mục như vậy:
db.employees.getIndexes()
Kết quả:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "original_name_text_translations.sitcom_name_text", "default_language" : "danish", "language_override" : "sprog", "weights" : { "original_name" : 1, "translations.sitcom_name" : 1 }, "textIndexVersion" : 3 } ]
Vì vậy, trong trường hợp này, MongoDB đã đặt tên mặc định cho chỉ mục là original_name_text_translations.sitcom_name_text
, bởi vì điều đó bắt nguồn từ định nghĩa chỉ mục của chúng tôi.
Chúng tôi sẽ cần sử dụng mã sau để bỏ chỉ mục này theo tên:
db.sitcoms.dropIndex("original_name_text_translations.sitcom_name_text")
Để đưa tên vào chỉ mục như vậy, chúng tôi có thể cung cấp tên đó trong cùng một tài liệu mà chúng tôi đã sử dụng để chỉ định ngôn ngữ mặc định và ghi đè ngôn ngữ.
Vì vậy, chúng tôi có thể tạo chỉ mục như sau:
db.sitcoms.createIndex(
{
"original_name": "text",
"translations.sitcom_name": "text"
},
{
"default_language": "danish",
"language_override": "sprog",
"name": "sitcoms_da"
}
)
Trong trường hợp này, chúng tôi đã sử dụng sitcoms_da
như tên chỉ mục.
Bây giờ khi chúng tôi nhận được danh sách các chỉ mục, chúng tôi có thể thấy tên được chỉ định của chúng tôi:
db.sitcoms.getIndexes()
Kết quả:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "sitcoms_da", "default_language" : "danish", "language_override" : "sprog", "weights" : { "original_name" : 1, "translations.sitcom_name" : 1 }, "textIndexVersion" : 3 } ]