MongoDB: Làm thế nào để truy vấn các bản ghi trong đó trường rỗng hoặc không được đặt?


106

Tôi có một Emailtài liệu có sent_attrường ngày tháng:

{
  'sent_at': Date( 1336776254000 )
}

Nếu điều Emailnày chưa được gửi đi, sent_attrường này có thể là rỗng hoặc không tồn tại.

Tôi cần đếm tất cả các thư đã gửi / chưa gửi Emails. Tôi đang cố gắng tìm ra cách phù hợp để truy vấn thông tin này. Tôi nghĩ đây là cách phù hợp để có được số lượng đã gửi:

db.emails.count({sent_at: {$ne: null}})

Nhưng làm thế nào để tôi có được số lượng những cái không được gửi?

Câu trả lời:



16

Nếu bạn CHỈ muốn đếm các tài liệu sent_atđược xác định với giá trị là null(không đếm các tài liệu sent_atchưa được đặt):

db.emails.count({sent_at: { $type: 10 }})

Cảm ơn bạn. Khi kiểm tra nếu trường tồn tại nhưng được đặt thành null, điều này rất hữu ích.
jstice4all

Upvoted vì khi sử dụng findvới đồng bằng nullnó diễn giải các giá trị như 0.0như nullvà giải pháp này tránh được điều này
Matthias Herrmann

12

Sử dụng:

db.emails.count({sent_at: null})

Nó đếm tất cả các email có thuộc tính sent_at là null hoặc không được đặt. Truy vấn trên tương tự như dưới đây.

db.emails.count($or: [
  {sent_at: {$exists: false}},
  {sent_at: null}
])

8

Có vẻ như bạn chỉ có thể làm một dòng:

{ "sent_at": null }

0

Bạn cũng có thể thử điều này:

db.emails.find($and:[{sent_at:{$exists:true},'sent_at':null}]).count()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.