हालांकि यह उल्लेख किया गया है कि वास्तव में $and
ऑपरेटर की आवश्यकता नहीं है, किसी भी रूप में यह वह क्वेरी नहीं है जो आप चाहते हैं। निम्नलिखित पर विचार करें:
db.user.find_one({ 'names.firstName': 'alice','names.lastName': 'jones' })
यह वास्तव में करता है दिए गए रिकॉर्ड से मेल खाते हैं क्योंकि दोनों तत्व "फर्स्टनाम" के साथ "एलिस" और "लास्टनाम" मान "जोन्स" के बराबर हैं। लेकिन निश्चित रूप से यहां समस्या सरल है कि सरणी में कोई वास्तविक तत्व नहीं है जिसमें उन दोनों मानों के लिए उप-दस्तावेज़ है।
मिलान करने के लिए जहां एक सरणी तत्व में दिए गए मानदंड "दोनों" हैं, आपको $elemMatch
ऑपरेटर। यह क्वेरी शर्त को सरणी के "तत्वों" पर लागू करता है।
db.user.find_one({
'names': { '$elemMatch': { 'firstName': 'alice','lastName': 'smith' }
})
और निश्चित रूप से यदि आपने "एलिस" और "जोन्स" की कोशिश की तो वह मेल नहीं खाएगा क्योंकि वास्तव में उस ऑपरेशन में कोई तत्व शामिल नहीं है।