अगर आप केवल एक want चाहते हैं फ़ील्ड तो MongoDB में "dot notation" है। नेस्टेड तत्वों तक पहुँचने के लिए:
db.collection.find({ "to.email": "[email protected]" })
और यह मेल खाने वाले दस्तावेज़ लौटाएगा:
अधिक के लिए उस एक फ़ील्ड को एक शर्त के रूप में, $elemMatch
. का उपयोग करें ऑपरेटर
db.collection.find(
{ "to": {
"$elemMatch": {
"email": "[email protected]",
"name": "domains",
}
}}
)
और आप एक एकल . को "प्रोजेक्ट" कर सकते हैं उस तत्व को वापस करने के लिए मिलान करें:
db.collection.find({ "to.email": "[email protected]" },{ "to.$": 1 })
लेकिन अगर आप अधिक की अपेक्षा करते हैं एक . से अधिक मिलान करने के लिए तत्व, फिर आप एकत्रीकरण ढांचे का उपयोग करते हैं:
db.collection.aggregate([
// Matches the "documents" that contain this
{ "$match": { "to.email": "[email protected]" } },
// De-normalizes the array
{ "$unwind": "$to" },
// Matches only those elements that match
{ "$match": { "to.email": "[email protected]" } },
// Maybe even group back to a singular document
{ "$group": {
"_id": "$_id",
"from_name": { "$first": "$name" },
"to": { "$push": "$to" },
"subject": { "$first": "$subject" }
}}
])
यदि आवश्यक हो तो मैचों के लिए किसी सरणी की सामग्री से मिलान करने और/या "फ़िल्टर" करने के सभी मज़ेदार तरीके।