- सिंटैक्स त्रुटि इसलिए है क्योंकि आपको
services.port_info
. के आसपास उद्धरणों का उपयोग करना पड़ता है - हालांकि,
$elemMatch
नेस्टेड फ़ील्ड में वर्तमान में असमर्थित है वैसे भी - सौभाग्य से, आपको
$elemMatch
. की आवश्यकता नहीं है इस तरह की क्वेरी के लिए
यह करना चाहिए:
db.hosts.find({ ip : "127.0.0.1"}, { "services.port_info.product" : "ssh" });
$elemMatch
यदि आप सरणी ऑब्जेक्ट के अंदर कई मानदंडों से मेल खाना चाहते हैं, तो आवश्यक है, उदाहरण के लिए "वह सब ढूंढें जहां पोर्ट 9000 है और प्रोटोकॉल यूडीपी है"। यह आपकी डेटा संरचना के साथ असमर्थित होगा। मुझे यकीन नहीं है कि क्यों port_info
वस्तुओं की एक सरणी है (शायद अनिश्चित स्थितियों के लिए जहां एक बंदरगाह दो अलग-अलग सेवाओं से संबंधित हो सकता है?) - अगर यह एक ही वस्तु थी, यहां तक कि $elemMatch
समर्थित होगा।
साथ ही, ध्यान रखें कि ऐसी क्वेरी हमेशा पूरी वस्तु लौटाएगी।