यह समझने के लिए कि दस्तावेज़ीकरण क्या कह रहा है, आपको सबसे पहले यह समझने की आवश्यकता है कि सरणी के साथ श्रेणी क्वेरी कैसे काम करती है।
मान लीजिए कि आपके संग्रह में निम्नलिखित दस्तावेज़ हैं:
{ "finished" : [ 27, 3 ] },
{ "finished" : 17 }
पहली क्वेरी:
db.users.find( { "finished": { "$elemMatch": { "$gt": 15, "$lt": 20 } } } )
केवल उस दस्तावेज़ को लौटाएगा जहाँ "समाप्त" एक सरणी है। ऐसा इसलिए है क्योंकि $elemMatch
ऑपरेटर केवल उन दस्तावेज़ों से मेल खाता है जहाँ फ़ील्ड एक सरणी है और जहाँ एक ही तत्व सभी क्वेरी मानदंडों को पूरा करता है।
लेकिन दूसरी क्वेरी:
db.users.find( { "finished": { "$gt": 15, "$lt": 20 } } )
27
. के रूप में आप दोनों दस्तावेज़ों को वापस कर देंगे जो संभवत:वह नहीं है जो आप चाहते हैं 20
. से बड़ा है और 3
15
. से कम है . ऐसा इसलिए है क्योंकि 27
पहले मानदंड से मेल खाता है और 3
द्वितीय। यह व्यवहार वही है जो दस्तावेज़ीकरण में उल्लिखित है।
...एक तत्व 15 से अधिक शर्त को पूरा कर सकता है और दूसरा तत्व 20 से कम शर्त को पूरा कर सकता है, या एक तत्व दोनों को संतुष्ट कर सकता है:
निष्कर्ष:
सरणियों के विरुद्ध श्रेणी क्वेरीज़ सरणी में एक या एक से अधिक तत्वों से मेल खाएँगी जो सभी क्वेरी मानदंडों से मेल खाते हैं।
पाठ:
सरणियों के साथ श्रेणी क्वेरी का उपयोग न करें। आपको अप्रत्याशित परिणाम मिलेगा।