2012-05-14 30 views
92

Tôi có một tài liệu Email trong đó có một lĩnh vực sent_at date:MongoDB: Làm thế nào để truy vấn cho các bản ghi mà trường là null hoặc không được đặt?

{ 
    'sent_at': Date(1336776254000) 
} 

Nếu Email này chưa được gửi đi, lĩnh vực sent_at hoặc là null, hoặc không tồn tại.

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

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

Nhưng làm cách nào để tôi nhận được số lượng không được gửi?

Trả lời

153

Nếu trường sent_at không phải là ở đó khi nó không được thiết lập sau đó:

db.emails.count({sent_at: {$exists: false}}) 

Nếu nó ở đó và null, hoặc không có gì cả:

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

Refer here for querying and null

+1

Cập nhật link tham khảo: https://docs.mongodb.org/manual/tutorial/query-documents/#faq-developers-query-for-nulls – jakeorr

+0

Again https://docs.mongodb.com/ hướng dẫn sử dụng/hướng dẫn/truy vấn-cho-null-lĩnh vực/ – Hatshepsut

5

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

{ "sent_at": null } 
10

Nếu bạn muốn chỉ đếm tài liệu với sent_at định nghĩa với một giá trị của null (không tính các tài liệu với sent_at not set):

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

Cảm ơn bạn. Khi kiểm tra nếu trường tồn tại nhưng thiết lập để null này là rất hữu ích. – jstice4all

6

Sử dụng:

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

Những tính tất cả email có thuộc tính sent_at là null hoặc không được đặt. Truy vấn trên giống như dưới đây.

db.emails.count($or: [ 
    {sent_at: {$exists: false}}, 
    {sent_at: null} 
]) 
Các vấn đề liên quan