Để 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: