2012-08-27 40 views
7

tôi có các tài liệu sau:MongoDB: tìm giá trị trong mảng với nhiều tiêu chí

{_id : 1, numbers : [-1000, 1000]} 
{_id : 2, numbers : [5]} 

Tôi đang cố gắng để có được một truy vấn mà sẽ tìm thấy một tài liệu có giá trị trong mảng số đó là giữa - 10 và 10 (trong trường hợp này, _id: 2). Tuy nhiên, khi tôi thử các cách sau:

db.foo.find({numbers : $and : [{$gt : -10},{$lt : 10}]}) 

nó trả về tất cả tài liệu. Điều này có thể làm được nếu không có bản đồ giảm? Cảm ơn, -JWW

Trả lời

7

Bạn có thể sử dụng $ elemMatch để kiểm tra xem một phần tử trong một mảng có khớp với biểu thức đối sánh được chỉ định hay không.

Trong trường hợp này, bạn có thể sử dụng nó để có được một tài liệu có số mảng có một yếu tố đó là giữa -10 và 10:

db.foo.find({ numbers : { $elemMatch : { $gt : -10 , $lt : 10 } } }); 

này sẽ chỉ trả lại _id: 2 tài liệu.

+0

rất đẹp. Cảm ơn bạn! – JWally

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