2012-05-14 14 views
92

मैं एक Email दस्तावेज है जो एक sent_at दिनांक फ़ील्ड है है:MongoDB: रिकॉर्ड्स के लिए क्वेरी कैसे करें जहां फ़ील्ड शून्य है या सेट नहीं है?

{ 
    'sent_at': Date(1336776254000) 
} 

यदि यह Email नहीं भेजा गया है, sent_at क्षेत्र या तो अशक्त, या गैर existant है।

मुझे सभी भेजे गए/unsent Emails की गिनती प्राप्त करने की आवश्यकता है। मैं इस जानकारी के लिए पूछने का सही तरीका जानने की कोशिश कर रहा हूं। मुझे लगता है कि यह सही तरीके से भेजा संख्या प्राप्त करने के लिए है:

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

लेकिन मैं जो कि नहीं भेजा जाता है की गिनती कैसे मिलना चाहिए?

उत्तर

153

तो sent_at क्षेत्र वहाँ नहीं है जब इसकी तो सेट नहीं: नहीं वहाँ सब पर

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

अपने वहाँ हैं और अशक्त, या:

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

Refer here for querying and null

+1

अपडेट किया गया संदर्भ लिंक: https://docs.mongodb.org/manual/tutorial/query-documents/#faq-developers-query-for-nulls – jakeorr

+0

फिर https://docs.mongodb.com/ मैनुअल/ट्यूटोरियल/क्वेरी-फॉर-नल-फ़ील्ड/ – Hatshepsut

5

आप लगता है केवल एक पंक्ति कर सकते हैं:

{ "sent_at": null } 
10

आप केवल sent_atnull के एक मूल्य के साथ परिभाषित के साथ दस्तावेजों गिनती करने के लिए (sent_at के साथ दस्तावेजों गिनती नहीं है सेट नहीं) चाहते हैं:

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

धन्यवाद। जब फ़ील्ड मौजूद है तो जांच कर रहा है लेकिन शून्य पर सेट यह बहुत उपयोगी है। – jstice4all

6

उपयोग:

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

कौन सा सब मायने रखता है जिनकी send_at संपत्ति शून्य है या सेट नहीं है। उपरोक्त क्वेरी नीचे जैसा ही है।

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