आप $elemMatch
. का उपयोग कर सकते हैं सबसे हाल के MongoDB संस्करणों में एक क्वेरी-प्रोजेक्शन ऑपरेटर के रूप में। मोंगो शेल से:
db.parents.find(
{'children.age': {$gte: 18}},
{children:{$elemMatch:{age: {$gte: 18}}}})
यह छोटे बच्चों के दस्तावेज़ों को children
. से फ़िल्टर करता है सरणी:
{ "_id" : ..., "children" : [ { "name" : "Margaret", "age" : 20 } ] }
{ "_id" : ..., "children" : [ { "name" : "John", "age" : 22 } ] }
जैसा कि आप देख सकते हैं, बच्चों को अभी भी उनके मूल दस्तावेज़ों में समूहीकृत किया जाता है। MongoDB क्वेरीज़ संग्रह से दस्तावेज़ लौटाती हैं। आप एग्रीगेशन फ्रेमवर्क के $unwind
. का उपयोग कर सकते हैं उन्हें अलग दस्तावेज़ों में विभाजित करने की विधि:
> db.parents.aggregate({
$match: {'children.age': {$gte: 18}}
}, {
$unwind: '$children'
}, {
$match: {'children.age': {$gte: 18}}
}, {
$project: {
name: '$children.name',
age:'$children.age'
}
})
{
"result" : [
{
"_id" : ObjectId("51a7bf04dacca8ba98434eb5"),
"name" : "Margaret",
"age" : 20
},
{
"_id" : ObjectId("51a7bf04dacca8ba98434eb6"),
"name" : "John",
"age" : 22
}
],
"ok" : 1
}
मैं $match
दोहराता हूं प्रदर्शन के लिए खंड:पहली बार इसके माध्यम से माता-पिता को नहीं . से हटा दिया जाता है कम से कम 18 साल के बच्चे, इसलिए $unwind
केवल उपयोगी दस्तावेजों पर विचार करता है। दूसरा $match
$unwind
. को हटाता है आउटपुट जो मेल नहीं खाता, और $project
उप-दस्तावेज़ों से बच्चों की जानकारी को शीर्ष स्तर तक फहराता है।