MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Truy vấn Mongoid theo giá trị hoặc giá trị mặc định

Để 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 đó :fieldnull 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ứ ở đó 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:




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB - Truy vấn một Bộ sưu tập

  2. Không thể khởi động lại mongodb trên Ubuntu 11.04

  3. Sắp xếp có điều kiện Mongodb

  4. Cách sử dụng aggregrate trong mongodb để $ match _id

  5. NodeJS / ExpressJS gửi phản hồi lượng lớn dữ liệu trong 1 luồng