MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Mongo lập chỉ mục trên mảng đối tượng so với đối tượng

Việc truy vấn chắc chắn sẽ dễ dàng hơn rất nhiều trong trường hợp thứ hai, trong đó 'nhóm' là một mảng tài liệu con, mỗi tài liệu có một 'id' và 'tên'.

Mongo không hỗ trợ truy vấn "ký tự đại diện", vì vậy nếu tài liệu của bạn được cấu trúc theo cách đầu tiên và bạn muốn tìm tài liệu phụ có giá trị "hi", nhưng không biết rằng khóa là 152, bạn sẽ không thể làm đi. Với cấu trúc tài liệu thứ hai, bạn có thể dễ dàng truy vấn cho {"groups.name":"hi"}.

Để biết thêm thông tin về cách truy vấn các đối tượng được nhúng, vui lòng xem tài liệu có tiêu đề "Ký hiệu dấu chấm (Tiếp cận các đối tượng)" http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29 Phần "Giá trị trong một mảng" và "Giá trị trong một đối tượng được nhúng" của tài liệu "Truy vấn nâng cao" cũng rất hữu ích:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ValueinanArray

Đối với chỉ mục trên {'groups.id':1}, mục nhập chỉ mục sẽ được tạo cho mọi khóa "id" trong mọi mảng "nhóm" trong mọi tài liệu. Với chỉ mục trên "nhóm", chỉ một mục nhập chỉ mục sẽ được tạo cho mỗi tài liệu.

Nếu bạn có tài liệu thuộc loại thứ hai và chỉ mục trên các nhóm, các truy vấn của bạn sẽ phải khớp với toàn bộ tài liệu con để sử dụng chỉ mục. Ví dụ, với tài liệu:

{ "_id" : 1, "groups" : [ { "id" : 152, "name" : "hi" }, { "id" : 111, "name" : "group2" } ] }

Truy vấn

db.<collectionName>.find({groups:{ "id" : 152, "name" : "hi" }}) 

sẽ sử dụng chỉ mục, nhưng các truy vấn

db.<collectionName>.find({"groups":{$elemMatch:{name:"hi"}}})

hoặc

db.<collectionName>.find({"groups.name":"hi"})

sẽ không.

(Các) chỉ mục mà bạn tạo phải phụ thuộc vào truy vấn mà bạn thường thực hiện nhất.

Bạn có thể thử nghiệm với (nếu có) lập chỉ mục các truy vấn của bạn đang sử dụng bằng lệnh .explain (). http://www.mongodb.org/display/DOCS/Explain Dòng đầu tiên, "con trỏ" sẽ cho bạn biết chỉ mục nào đang được sử dụng. "con trỏ":"BasicCursor" cho biết rằng quá trình quét toàn bộ bộ sưu tập đang được thực hiện.

Có thêm thông tin về lập chỉ mục trong tài liệu: http://www.mongodb.org/display / DOCS / Chỉ mục

Phần "Phần tử mảng lập chỉ mục" của các liên kết ở trên liên kết đến tài liệu có tiêu đề "Multikeys": http://www.mongodb.org/display/DOCS/Multikeys

Hy vọng rằng điều này sẽ nâng cao hiểu biết của bạn về cách truy vấn trên các tài liệu nhúng và cách các chỉ mục được sử dụng. Vui lòng cho chúng tôi biết nếu bạn có bất kỳ câu hỏi nào tiếp theo!




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Trích xuất Decimal từ Decimal128 với Mongoose - MongoDB

  2. Nhập tệp JSON vào MongoDB với mongoimport

  3. MongoDB 2.1 Khung tổng hợp Tổng các phần tử mảng khớp với tên

  4. Quy ước đặt tên cho MongoDB là gì?

  5. Trợ giúp truy vấn MongoDB - truy vấn các giá trị của bất kỳ khóa nào trong một đối tượng con