Để 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 20
và 3
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ờ.