मुझे लगता है कि मैंने इसे मोंगो दस्तावेजों की जांच के बाद समझ लिया। मूल रूप से, वहाँ है उन दोनों के बीच शब्दार्थ में अंतर। अनिवार्य रूप से, क्वेरी के पहले रूप में {c: {d: d1}}
, mongo मानता है कि आप संपूर्ण . निर्दिष्ट कर रहे हैं उपदस्तावेज इसलिए यदि आपके पास एक उप-दस्तावेज़ है {c: {d: d1, e: e1}}
, यह मेल नहीं खाएगा।
OTOH, क्वेरी का दूसरा रूप {'c.d': d1}
तात्पर्य है कि आप उप-दस्तावेज़ के भीतर केवल एक फ़ील्ड पर एक मैच निर्दिष्ट कर रहे हैं। यह मेल खाएगा भले ही उप-दस्तावेज़ में अन्य फ़ील्ड या संपूर्ण उप-दस्तावेज़ हों।
यह अंतर सूचकांक तक फैला हुआ है। _ensureIndex({c: 1})
और _ensureIndex({'c.d': 1})
दो अलग-अलग अनुक्रमणिकाएं हैं, और भले ही पहला वाला संपूर्ण उप-दस्तावेज़ को अनुक्रमित करता है, लेकिन यदि आप c.d
के साथ किसी व्यक्तिगत फ़ील्ड पर क्वेरी करते हैं तो इसका उपयोग नहीं किया जाएगा। संकेतन।