MongoDB 2.2 का नया $elemMatch
प्रोजेक्शन ऑपरेटर केवल पहले . को शामिल करने के लिए लौटाए गए दस्तावेज़ को बदलने का एक और तरीका प्रदान करता है मिलान shapes
तत्व:
db.test.find(
{"shapes.color": "red"},
{_id: 0, shapes: {$elemMatch: {color: "red"}}});
रिटर्न:
{"shapes" : [{"shape": "circle", "color": "red"}]}
2.2 में आप $ projection operator
. का उपयोग करके भी ऐसा कर सकते हैं , जहां $
प्रोजेक्शन ऑब्जेक्ट में फ़ील्ड नाम क्वेरी से फ़ील्ड के पहले मेल खाने वाले सरणी तत्व की अनुक्रमणिका का प्रतिनिधित्व करता है। निम्नलिखित उपरोक्त के समान परिणाम देता है:
db.test.find({"shapes.color": "red"}, {_id: 0, 'shapes.$': 1});
MongoDB 3.2 अपडेट
3.2 रिलीज से शुरू करके, आप नए $filter
. का उपयोग कर सकते हैं प्रोजेक्शन के दौरान ऐरे को फ़िल्टर करने के लिए एग्रीगेशन ऑपरेटर, जिसमें सभी . को शामिल करने का फ़ायदा होता है केवल पहले वाले के बजाय मेल खाता है।
db.test.aggregate([
// Get just the docs that contain a shapes element where color is 'red'
{$match: {'shapes.color': 'red'}},
{$project: {
shapes: {$filter: {
input: '$shapes',
as: 'shape',
cond: {$eq: ['$$shape.color', 'red']}
}},
_id: 0
}}
])
परिणाम:
[
{
"shapes" : [
{
"shape" : "circle",
"color" : "red"
}
]
}
]