जवाबों:
हाँ, $ का उपयोग करना संभव है :
db.things.find( { a : { $exists : false } } ); // return if a is missing
जब सत्य होता है, तो $ मौजूद दस्तावेज़ों से मेल खाता है, जिसमें फ़ील्ड शामिल होता है, जिसमें दस्तावेज़ शामिल हैं जहाँ फ़ील्ड मान शून्य है। यदि गलत है, तो क्वेरी केवल उन दस्तावेज़ों को वापस करती है जिनमें फ़ील्ड शामिल नहीं है।
scope :without_recommendation, :where => {:recommendation => {"$exists"=>false}}
यदि आपको परवाह नहीं है कि क्षेत्र गायब है null
(या यदि यह कभी नहीं है null
) तो आप थोड़ा कम और सुरक्षित उपयोग कर सकते हैं :
db.things.find( { a : null } ); // return if a is missing or null
यह सुरक्षित है क्योंकि फ़ील्ड शून्य होने $exists
पर true
भी वापस आ जाएगी , जो अक्सर वांछित परिणाम नहीं होता है और इससे NPE हो सकता है।
null
और गायब नहीं होना चाहिए । यह वास्तव में अप्रत्याशित व्यवहार है, क्योंकि आप 0
(जो भी है false
) के लिए ऐसा नहीं कर पाएंगे , इसलिए null
यहां अपवाद है। इसलिए, सर्वोत्तम अभ्यास अधिक पठनीय उत्तर है $exists: false
जिसका उपयोग अस्पष्ट नहीं है। याद रखें, यदि आप इसके पीछे उस टिप्पणी की जरूरत है, तो आपका थोड़ा छोटा संस्करण वास्तव में छोटा नहीं है!
a
क्योंकि या तो, a
है null
या क्योंकि a
याद आ रही है, तो $exists
, अच्छा पर्याप्त नहीं है के रूप में यह उन मामलों में जहां पकड़ नहीं होगा a
है null
।
$exist
क्वेरीज़ इंडेक्स का उपयोग नहीं कर सकते (देखें mongodb.org/display/DOCS/… )।