2010-10-30 41 views
57

Trong MongoDB, nếu tôi là để lưu trữ một mảng (nói ["red", "blue"]) trong một lĩnh vực "color", nó index "red""blue" vì vậy tôi có thể truy vấn cho "red", ví dụ, hoặc không ở làm {"red", "blue"} một chỉ số tổng hợp?Mảng chỉ mục MongoDB như thế nào?

Trả lời

76

Khi nói đến lập chỉ mục mảng, MongoDB lập chỉ mục mỗi giá trị của mảng để bạn có thể truy vấn cho từng mục, chẳng hạn như "màu đỏ". Ví dụ:

> db.col1.save({'colors': ['red','blue']}) 
> db.col1.ensureIndex({'colors':1}) 

> db.col1.find({'colors': 'red'}) 
{ "_id" : ObjectId("4ccc78f97cf9bdc2a2e54ee9"), "colors" : [ "red", "blue" ] } 
> db.col1.find({'colors': 'blue'}) 
{ "_id" : ObjectId("4ccc78f97cf9bdc2a2e54ee9"), "colors" : [ "red", "blue" ] } 

Để biết thêm thông tin, hãy kiểm tra tài liệu MongoDB về Multikeys: http://www.mongodb.org/display/DOCS/Multikeys

+0

là nó có thể để tìm kiếm một mảng phần như cho ("màu sắc": [ "đỏ", "xanh", "xanh"]), tôi có thể tìm kiếm ("màu sắc": ["đỏ", "xanh"]) hay tôi phải thực hiện riêng lẻ? –

+2

@GauravAbbi - Tôi nghĩ rằng các công trình, nhưng mongo sẽ chỉ sử dụng chỉ mục để tìm khóa mảng đầu tiên. Sau đó nó quét bộ tài liệu cho những người khớp với phần còn lại của các phím. – Mnebuerquo

+0

Những điều cần cân nhắc sẽ được thực hiện để sử dụng các chỉ số đa nhân như được sử dụng cho một chỉ mục hợp chất. ví dụ: chỉ mục mô tả màu chính và màu phụ? –

Các vấn đề liên quan