Câu trả lời:
Vâng, có thể sử dụng $ tồn tại :
db.things.find( { a : { $exists : false } } ); // return if a is missing
Khi đúng, $ tồn tại khớp với các tài liệu chứa trường, bao gồm các tài liệu có giá trị trường là null. Nếu sai, truy vấn chỉ trả về các tài liệu không chứa trường.
scope :without_recommendation, :where => {:recommendation => {"$exists"=>false}}
Nếu bạn không quan tâm đến trường có bị thiếu hay không null
(hoặc không bao giờ null
) thì bạn có thể sử dụng trường ngắn hơn một chút và an toàn hơn:
db.things.find( { a : null } ); // return if a is missing or null
Nó an toàn hơn vì $exists
sẽ trả về true
ngay cả khi trường trống, thường không phải là kết quả mong muốn và có thể dẫn đến NPE.
null
và không bị thiếu. Đây thực sự là một hành vi không mong đợi, bởi vì bạn sẽ không thể làm điều tương tự đối với 0
(cũng là false
), vì vậy, null
loại ngoại lệ ở đây. Do đó, cách tốt nhất là sử dụng câu trả lời dễ đọc hơn $exists: false
, không mơ hồ. Hãy nhớ rằng, biến thể ngắn hơn một chút của bạn không thực sự ngắn hơn nếu bạn cần có nhận xét đằng sau nó!
a
, hoặc vì a
là null
hay vì a
là mất tích, sau đó $exists
không đủ tốt, vì nó sẽ không bắt các trường hợpa
đang có null
.
$exist
các truy vấn không thể sử dụng chỉ mục (xem mongodb.org/display/DOCS/… ).