Tôi có bộ sưu tập nơi một số đối tượng có khóa foo
. Bây giờ tôi cố gắng truy vấn cho tất cả các đối tượng thực sự có khóa này nhưng không phải với giá trị cụ thể bar
. Đối với điều này tôi sử dụng truy vấn sau đây:MongoDB/PyMongo: Truy vấn nhiều tiêu chí - kết quả không mong muốn
collection.find({'foo': {'$exists': True}, 'foo': {'$ne': 'bar'}})
Tôi nghĩ rằng cả hai tiêu chí được kết nối thông qua một logic AND. Tuy nhiên, tôi cũng nhận được các đối tượng không có khóa foo
. Trong thực tế, tôi nhận được kết quả tương tự khi tôi chỉ sử dụng các truy vấn
collection.find({'foo': {'$ne': 'bar'}})
Trên hans khác, nếu tôi sử dụng
collection.find({'foo': {'$exists': True}})
tôi một cách chính xác chỉ có được đối tượng với foo
nhưng obvisouly tất cả trong số họ, vì vậy một số người trong số họ có giá trị bar
.
Làm cách nào để xây dựng truy vấn của mình để đạt được kết quả ban đầu? Có một loại thứ tự mà trong đó nhiều tiêu chí được kiểm tra? Tôi có chỉ định rõ ràng logic AND của cả hai tiêu chí không?
Đây là một ví dụ tuyệt vời của một truy vấn pymongo cơ bản. Tôi ước nó xuất hiện sớm hơn khi tôi googled "pymongo tìm các ví dụ": - \. +1 –
Tôi không nghĩ rằng cần có các ví dụ cụ thể cho PyMongo vì cú pháp cơ bản giống như khi sử dụng trình bao Mongo. Tôi _think_ vỏ Mongo là một chút hào phóng hơn khi nói đến việc có dấu ngoặc kép xung quanh từ khóa và tên trường (ví dụ: '{$ ne: 'bar'}' sẽ hoạt động cũng như '{'$ ne': 'bar'} '). Có thể viết hoa, ví dụ: 'True' cũng có thể quan trọng. – Christian