MongoDB में सरणी के अंदर विशिष्ट शर्त पूरी करने वाले ऑब्जेक्ट को प्राप्त करने के लिए $elemMatch प्रोजेक्शन ऑपरेटर का उपयोग करें।
उदाहरण
सरणी वाले दस्तावेज़ बनाएं:
> db.getMatchingDocumentDemo.insertOne(
{
_id: 1,
"UserDetails": [
{"UserName": "John", "UserAge": 23}
]
}
);
{ "acknowledged" : true, "insertedId" : 1 }
> db.getMatchingDocumentDemo.insertOne(
{_id: 2, "UserDetails": [{"UserName": "Larry", "UserAge": 24}]}
);
{ "acknowledged" : true, "insertedId" : 2 }
दस्तावेज़ देखें:
> db.getMatchingDocumentDemo.find().pretty();
{ "_id" : 1, "UserDetails" : [ { "UserName" : "John", "UserAge" : 23 } ] }
{ "_id" : 2, "UserDetails" : [ { "UserName" : "Larry", "UserAge" : 24 } ] }
UserAge 24 वाले ऑब्जेक्ट वाली सरणी प्राप्त करें
> db.getMatchingDocumentDemo.find({UserDetails: {$elemMatch: {UserAge: 24}}});
आउटपुट:
{ "_id" : 2, "UserDetails" : [ { "UserName" : "Larry", "UserAge" : 24 } ] }
व्याख्या:
$elemMatchक्वेरी में - दस्तावेज़ फिल्टर करता है जहां सरणी में कम से कम एक तत्व सभी शर्तें पूरी करता है- यहां UserAge: 24 वाले तत्व वाला दस्तावेज़ लौटाया गया
- पूरा दस्तावेज़ लौटता है, सरणी अनफिल्टर्ड रहती है
केवल मिलान करने वाला तत्व प्राप्त करें (प्रोजेक्शन)
db.getMatchingDocumentDemo.find(
{},
{UserDetails: {$elemMatch: {UserAge: 24}}}
)
{ "_id" : 2, "UserDetails" : [ { "UserName" : "Larry", "UserAge" : 24 } ] }
क्वेरी vs प्रोजेक्शन में अंतर:
| उपयोग | व्यवहार |
|---|---|
क्वेरी में $elemMatch | दस्तावेज़ फिल्टर करता है, पूरी सरणी लौटाता है |
प्रोजेक्शन में $elemMatch | सरणी को केवल मिलान करने वाले तत्व तक सीमित करता है |
एकाधिक शर्तें
db.collection.find({
arrayField: {$elemMatch: {field1: "value1", field2: {$gt: 10}}}
})
यह सुनिश्चित करता है कि एक ही सरणी तत्व दोनों शर्तें पूरी करे।