MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

क्वेरी अपेक्षित परिणामों से अधिक लौटाती है

यह व्यवहार मोंगो प्रलेखन में अपेक्षित और समझाया गया है यहां

ऐसा लगता है कि जब सरणी तत्वों का एक संयोजन स्वतंत्र रूप से सभी स्थितियों से मेल खाता है, तो मोंगो परिणाम वापस देकर "स्मग" खेलने के लिए तैयार होता है।

हमारे उदाहरण में, 5 $lt:20 शर्त से मेल खाता है और 25 $gt:10 शर्त से मेल खाता है। तो, यह एक मैच है।

निम्नलिखित दोनों [5,25] परिणाम लौटाएंगे:

db.collection.find({ x: {$gt: 10, $lt: 20} })

db.collection.find({ $and : [{x: {$gt: 10}},{x:{ $lt: 20}} ] })

यदि यह उपयोगकर्ता अपेक्षित व्यवहार है, तो राय भिन्न हो सकती है। लेकिन यह निश्चित रूप से प्रलेखित है, और इसकी अपेक्षा की जानी चाहिए।

संपादित करें , नील के दुखद अभी तक अत्यधिक शैक्षिक संपादन के लिए मूल उत्तर के लिए, समाधान के लिए पूछना:

$elemMatch का उपयोग केवल सरणियों . के लिए "सख्त" तत्व तुलना कर सकते हैं .

db.collection.find({ x: { $elemMatch:{ $gt:10, $lt:20  } } })

नोट :यह x:[11,12] और . दोनों से मेल खाएगा x:[11,25]

मेरा मानना ​​है कि जब इस तरह की एक क्वेरी की आवश्यकता होती है, तो दो . पर एक संयोजन प्रश्नों की आवश्यकता है, और परिणाम संयुक्त। नीचे एक क्वेरी है जो x वाले दस्तावेज़ों के लिए सही परिणाम देता है एक सरणी नहीं :

db.collection.find( { $where : "!Array.isArray(this.x)", x: {$gt: 10, $lt: 20} } )

लेकिन सबसे अच्छा तरीका इस मामले में x के प्रकार को हमेशा . में बदलना है एक सरणी बनें, भले ही इसमें केवल एक तत्व हो। फिर, अपेक्षित व्यवहार के साथ सही परिणाम प्राप्त करने के लिए केवल $elemMatch क्वेरी की आवश्यकता होती है।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. क्या हर बार जब मैं डीबी के साथ काम करना चाहता हूं तो मोंगोडीबी कनेक्शन खोलना जरूरी है?

  2. मोंगोडब में उप-दस्तावेज़ फ़ील्ड और कुल राशि की गणना करें

  3. मोंगो डेटाबेस में डालने पर 504 त्रुटि

  4. MongoDB:अपने नाम में जगह रखने वाली एक कुंजी को क्वेरी करें

  5. टाइपप्रति के साथ नेवला मॉडल में कस्टम क्वेरी सहायक को कैसे परिभाषित करें?