Để tìm tài liệu không có một khóa cụ thể, bạn muốn sử dụng $exists
:
Vì vậy, kiểm tra sự tồn tại sẽ giống như sau:
Model.where(:field.exists => false)
Model.where(:field => { :$exists => false })
Lưu ý rằng :field.exists đầu tiên biểu mẫu trở thành biểu mẫu thứ hai trước khi nó được gửi đến MongoDB; Tôi đề cập đến vấn đề này vì bạn sẽ không thể sử dụng :field ở nơi khác trong truy vấn mà không sử dụng $and hoặc $or để kết hợp các mệnh đề::field.exists mở rộng có thể dẫn đến các khóa trong truy vấn Hash ghi đè lên nhau. Bạn sẽ không gặp phải vấn đề này ở đây nhưng một lời nhắc nhở không thể tránh khỏi.
Tìm kiếm true thật dễ dàng:
Model.where(:field => true)
Bạn muốn một trong hai, hãy kết hợp chúng với $or
:
Model.where(:$or => [
{ :field.exists => false },
{ :field => true }
])
If :field có thể ở đó nhưng có null giá trị thì bạn có thể sử dụng { :field => nil } để khớp với các tài liệu trong đó :field là null hoặc hoàn toàn không có:
Model.where(:$or => [
{ :field => null },
{ :field => true }
])
# or
Model.where(:field.in => [ null, true ]) # This is probably the one you want
Ngoài ra còn có { :field => { :$type => 10 } } nếu bạn đang tìm kiếm những thứ ở đó và rõ ràng null . Bây giờ có thể là thời điểm tốt để xem xét nhanh Câu hỏi thường gặp về MongoDB: