MongoDB: उन रिकॉर्ड के लिए क्वेरी कैसे करें जहां फ़ील्ड शून्य है या सेट नहीं है?


106

मेरे पास एक Emailदस्तावेज़ है जिसमें एक sent_atदिनांक फ़ील्ड है:

{
  'sent_at': Date( 1336776254000 )
}

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

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

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

लेकिन मुझे उन लोगों की गिनती कैसे प्राप्त करनी चाहिए जो नहीं भेजे गए हैं?

जवाबों:



16

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

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

धन्यवाद। जब जाँच की जाती है कि क्षेत्र मौजूद है, लेकिन इसे खाली करने के लिए सेट करना बहुत उपयोगी है।
jstice4all

अपवित्र क्योंकि जब findसादे के साथ प्रयोग करते हैं तो nullयह मानों की तरह व्याख्या 0.0करता है nullऔर यह समाधान इससे बचता है
Matthias Herrmann

12

उपयोग:

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

जो उन सभी ईमेलों को गिनाता है जिनकी sent_at संपत्ति शून्य है या सेट नहीं है। उपरोक्त क्वेरी नीचे की तरह ही है।

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


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.