कैसे mongodb में बाल वस्तुओं क्वेरी करने के लिए


80

मैं मोंगोडब के लिए नया हूं और बाल वस्तुओं को क्वेरी करने की कोशिश कर रहा हूं। मेरे पास राज्यों का एक संग्रह है, और प्रत्येक राज्य में बाल शहर हैं। शहरों में से एक के पास एक नाम संपत्ति है जो अशक्त है, जो मेरे ऐप में त्रुटियां पैदा कर रहा है। मैं उन बच्चों के शहरों को खोजने के लिए राज्य संग्रह की क्वेरी कैसे करूँगा जिनका नाम == अशक्त है?

जवाबों:


114

यदि यह ठीक है null(सेट नहीं किए जाने के विपरीत):

db.states.find({"cities.name": null})

(लेकिन जैसा कि javierfp बताते हैं, यह उन दस्तावेज़ों से भी मेल खाता है, जिनका कोई शहर सरणी नहीं है, मैं मान रहा हूँ कि वे ऐसा करते हैं)।

यदि यह मामला है कि संपत्ति सेट नहीं है:

db.states.find({"cities.name": {"$exists": false}})

मैंने इन दो आवेषणों के साथ बनाए गए संग्रह के साथ उपरोक्त परीक्षण किया है:

db.states.insert({"cities": [{name: "New York"}, {name: null}]})
db.states.insert({"cities": [{name: "Austin"}, {color: "blue"}]})

पहली क्वेरी पहली अवस्था को खोजती है, दूसरी क्वेरी दूसरी को खोजती है। यदि आप उन दोनों को एक क्वेरी से खोजना चाहते हैं, तो आप एक क्वेरी बना सकते हैं $or:

db.states.find({"$or": [
  {"cities.name": null}, 
  {"cities.name": {"$exists": false}}
]})

मैं सभी बाल वस्तुओं को कैसे प्राप्त कर सकता हूं। प्रक्षेपण का उपयोग करके मैं सिर्फ एक संपत्ति प्राप्त कर रहा हूं
यशराज बसन

38

अपने "राज्यों" संग्रह को मान लेना है:

{"name" : "Spain", "cities" : [ { "name" : "Madrid" }, { "name" : null } ] }
{"name" : "France" }

अशांत शहरों वाले राज्यों को खोजने की क्वेरी होगी:

db.states.find({"cities.name" : {"$eq" : null, "$exists" : true}});

Nulls के लिए क्वेरी करना एक सामान्य गलती है:

db.states.find({"cities.name" : null});

क्योंकि यह क्वेरी कुंजी की कमी वाले सभी दस्तावेजों को वापस कर देगी (हमारे उदाहरण में यह स्पेन और फ्रांस वापस आ जाएगी)। इसलिए, जब तक आप सुनिश्चित न हों कि कुंजी हमेशा मौजूद है, आपको यह देखना होगा कि कुंजी पहले क्वेरी में मौजूद है।

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