MongoDB के साथ फ़ील्ड एक्ज़िस्ट की जाँच करें


131

इसलिए मैं उन सभी रिकॉर्डों को खोजने का प्रयास कर रहा हूं जिनके पास एक फील्ड सेट है और वह शून्य नहीं है।

मैं उपयोग करने की कोशिश करता हूं $exists, हालांकि MongoDB प्रलेखन के अनुसार , यह क्वेरी फ़ील्ड को खोलेगी जो समान अशक्त है।

$exists दस्तावेजों से मेल खाता है जिसमें शून्य मान संग्रहीत करने वाला फ़ील्ड है।

तो मैं अब मान रहा हूँ कि मुझे ऐसा कुछ करना होगा:

db.collection.find({ "fieldToCheck" : { $exists : true, $not : null } })

जब भी मैं यह कोशिश करता हूं, मुझे यह त्रुटि मिलती है कि [invalid use of $not] किसी को भी इस बात का अंदाजा है कि इसके लिए क्वेरी कैसे की जाए?

जवाबों:


184

उपयोग करें $ne("बराबर नहीं" के लिए)

db.collection.find({ "fieldToCheck": { $exists: true, $ne: null } })

यह क्या लौटाता है? एक अशक्त संग्रह? एक एकल आइटम? एक सरणी?
ओलिवर डिक्सन

4
@ आई लव यूनिकॉर्न: जो findहमेशा लौटता है: मापदंड से मेल खाते हुए रिकॉर्ड का एक संग्रह।
सर्जियो तुलेंत्सेव

2
@SergioTulentsev AFAIK यह एक कर्सर लौटाता है
fernandohur

@fernandohur: हाँ, लेकिन यदि आपके पास दस्तावेज़ों के एक से कम पृष्ठ हैं, तो आपको अंतर दिखाई नहीं देगा। और अगर आप बाहरी ड्राइवर से इस क्वेरी को चलाने के लिए थे, तो मुझे पूरा यकीन है कि उनमें से अधिकांश आपको कर्सर कार्यान्वयन विवरण से ढाल देंगे।
सर्जियो तुलेंत्से

24

मान लीजिए कि हमारे पास नीचे जैसा संग्रह है:

{ 
  "_id":"1234"
  "open":"Yes"
  "things":{
             "paper":1234
             "bottle":"Available"
             "bottle_count":40
            } 
}

हम जानना चाहते हैं कि बॉटल फील्ड मौजूद है या नहीं?

उत्तर:

db.products.find({"things.bottle":{"$exists":true}})

2
When <boolean> is true, $exists matches the documents that contain the field, including documents where the field value is null. डॉक्स से।
अल्बर्टबेंगल

1
हाँ, लेकिन मैं नहीं देखता कि क्यों एक DB मान शून्य होगा, यह मैला है
Martijn Scheffer

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