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

Chỉ định nhiều tiêu chí cho các phần tử mảng

Để hiểu tài liệu đang nói gì, trước tiên bạn cần hiểu cách hoạt động của truy vấn phạm vi với mảng.

Giả sử bạn có tài liệu sau trong bộ sưu tập của mình:

{ "finished" : [ 27, 3 ] },
{ "finished" : 17 }

Truy vấn đầu tiên:

db.users.find( { "finished": { "$elemMatch": { "$gt": 15, "$lt": 20 } } } )

Sẽ chỉ trả về tài liệu có "kết thúc" là một mảng. Điều này là do $elemMatch toán tử chỉ khớp với các tài liệu trong đó trường là một mảng và trong đó một phần tử duy nhất đáp ứng tất cả các tiêu chí truy vấn.

Nhưng truy vấn thứ hai:

db.users.find( { "finished": { "$gt": 15, "$lt": 20 } } )

sẽ trả về cả hai tài liệu có thể không phải là những gì bạn muốn 27 lớn hơn 203 nhỏ hơn 15 . Điều này là do 27 khớp với tiêu chí đầu tiên và 3 thư hai. Hành vi này là những gì được đề cập trong tài liệu.

... một phần tử có thể thỏa mãn điều kiện lớn hơn 15 và một phần tử khác có thể thỏa mãn điều kiện nhỏ hơn 20 hoặc một phần tử có thể thỏa mãn cả hai:

Kết luận:

Truy vấn phạm vi so với mảng sẽ khớp với một hoặc nhiều phần tử trong mảng phù hợp với tất cả các tiêu chí truy vấn.

Bài học:

Không sử dụng truy vấn phạm vi với mảng. Bạn sẽ nhận được kết quả bất ngờ.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tối ưu hóa môi trường Linux của bạn cho MongoDB

  2. Chèn bản ghi lớn vào mongodb bằng cách sử dụng mongo shell

  3. Đối tượng tài liệu MongoEngine được tạo bằng from_json không lưu

  4. MongoDB $ bsonSize

  5. MongoDB:Sử dụng ID của tài liệu ở nơi công cộng có an toàn không?