Bạn không thể làm điều này cụ thể, bạn không thể lập chỉ mục về giá trị của khóa.
Một giải pháp
Tuy nhiên, bạn có thể lập chỉ mục trên các mục trong một mảng.
Giả sử rằng dữ liệu của bạn trông giống như sau:
items:
[
{ Key: "Name", Value: "Peter", Type:String },
{ Key: "Age", Value: "18", Type:int },
{ Key: "City", Value: "San Jose", Type:String },
...30 to 40 items.
]
Bạn sẽ làm như sau để tạo chỉ mục trên items.Key
:
db.foo.ensureIndex( { 'items.Key' } )
Khi bạn làm như sau, bạn sẽ sử dụng chỉ mục:
db.foo.find( { 'items.Key' : "City", 'items.value' : "San Jose" } )
Điều này sẽ thu hẹp tìm kiếm chỉ những mục có Key = "City"
. Nếu đây là tất cả mọi thứ, thì điều này có thể sẽ không hữu ích.
Giải pháp thay thế
Tại sao lại là items
một mảng? Bạn có thể không cấu trúc dữ liệu như thế này:
items:
{
"Name" : { Value: "Peter", Type:String },
"Age" : { Value: "18", Type:int },
"City" : { Value: "San Jose", Type:String },
...30 to 40 items.
}
Bây giờ bạn có thể lập chỉ mục trên items.City.Value
, đó là những gì bạn đã tìm kiếm ngay từ đầu. Điều này cũng làm cho cấu trúc dữ liệu nhỏ hơn một chút.
Tùy thuộc vào bản chất dữ liệu của bạn, bạn cũng có thể muốn xem chỉ mục thưa thớt để giúp kiểm soát kích thước chỉ mục của bạn.