आप MongoDB कलेक्शन में ऑब्जेक्ट ऐरे में क्वेरी किए गए एलिमेंट को फ़िल्टर करने के लिए प्रोजेक्शन ऑपरेटर $elemMatch का उपयोग कर सकते हैं। MongoDB में ऑब्जेक्ट ऐरे में केवल क्वेरी किए गए एलिमेंट को पुनर्प्राप्त करने के लिए, आइए पहले डॉक्यूमेंट्स ऑब्जेक्ट ऐरे के साथ एक कलेक्शन बनाएं।
क्वेरी इस प्रकार है:
> db.objectArray.insert({"Persons":[ {"PersonName":"Adam","PersonSalary":25000},{"PersonName":"Larry","PersonSalary":27000} ]});
WriteResult({ "nInserted" : 1 })
> db.objectArray.insert({"Persons":[ {"PersonName":"David","PersonSalary":32000},{"PersonName":"Carol","PersonSalary":77000} ]});
WriteResult({ "nInserted" : 1 })
अब आप find() की मदद से सभी डॉक्यूमेंट्स प्रदर्शित कर सकते हैं। क्वेरी इस प्रकार है:
> db.objectArray.find().pretty();
निम्नलिखित आउटपुट है:
{ "_id" : ObjectId("5c6bfadc68174aae23f5ef53"), "Persons" : [ { "PersonName" : "Adam", "PersonSalary" : 25000 }, { "PersonName" : "Larry", "PersonSalary" : 27000 } ] }
{ "_id" : ObjectId("5c6bfb0968174aae23f5ef54"), "Persons" : [ { "PersonName" : "David", "PersonSalary" : 32000 }, { "PersonName" : "Carol", "PersonSalary" : 77000 } ] }
यहां MongoDB में ऑब्जेक्ट ऐरे में केवल क्वेरी किए गए एलिमेंट को पुनर्प्राप्त करने की क्वेरी है। यहां _id:0 आईडी प्रॉपर्टी को बाहर करने के लिए जोड़ा गया है ( _id प्रॉपर्टी न दिखाएं):
> db.objectArray.find({"Persons.PersonSalary":25000}, { _id:0, Persons:{$elemMatch:{"PersonSalary":25000}}}).pretty();
निम्नलिखित आउटपुट है:
{ "Persons" : [ { "PersonName" : "Adam", "PersonSalary" : 25000 } ] }
उपरोक्त कार्य करने का वैकल्पिक तरीका प्रोजेक्शन ऑपरेटर $ की मदद से है। क्वेरी इस प्रकार है:
> db.objectArray.find({"Persons.PersonSalary":25000}, { _id:0, 'Persons.$':1}).pretty();
निम्नलिखित आउटपुट है:
{ "Persons" : [ { "PersonName" : "Adam", "PersonSalary" : 25000 } ] }