जैसा कि आप एक . के खिलाफ मैच करते हैं फ़ील्ड, आपको केवल डॉट-नोटेशन का उपयोग करके अपने क्षेत्र के लिए पथ व्यक्त करना होगा:
> db.user.find({"profile.wishlist._id": 2})
जैसा कि में बताया गया है MongoDB दस्तावेज़ीकरण
, सरणियों के लिए (जैसे wishlist
) यह किसी दस्तावेज़ से मेल खाएगा यदि कोई सरणी में उप-दस्तावेज़ फ़ील्ड मान से मेल खाते हैं।
कृपया ध्यान दें कि यदि आपको कई . से मिलान करना है फ़ील्ड, आपको या तो उपयोग करने की आवश्यकता है:
$elemMatch
यदि सभी मेल खाने वाले फ़ील्ड समान . से संबंधित होने चाहिए उपदस्तावेज;- या यदि विभिन्न क्षेत्रों को एक ही उप-दस्तावेज़ से मेल खाने की आवश्यकता नहीं है, तो डॉट-नोटेशन का उपयोग करके व्यक्त किए गए कई फ़ील्ड।
इसे समझने के लिए कृपया उन दो प्रश्नों के आउटपुट की तुलना करें:
> db.user.find({"profile.wishlist._id": 2, "profile.wishlist.name": "a1"})
// ^ ^^
// will return your document even if the was no
// subdocument having both _id=2 and name=a1
> db.user.find({"profile.wishlist": {$elemMatch: { _id: 2, name: "a1"}}})
// ^ ^^
// no result as there was no subdocument
// matching _both_ _id=2 and name=a1