MongoDB में सरणी के अंदर आंशिक ऑब्जेक्ट (कुछ फील्ड) से मिलान करने के लिए दो तरीके उपयोग कर सकते हैं: पूर्ण ऑब्जेक्ट मिलान या डॉट नोटेशन।
उदाहरण
सरणी में ऑब्जेक्ट वाले दस्तावेज़ बनाएं:
> db.queryForPartialObjectDemo.insertOne({_id: new ObjectId(), "StudentDetails": [{"StudentId": 1, "StudentName": "Chris"}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cdfcf55bf3115999ed51206") }
>> db.queryForPartialObjectDemo.insertOne({_id: new ObjectId(), "StudentDetails": [{"StudentId": 2, "StudentName": "David"}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cdfcf55bf3115999ed51207") }
दस्तावेज़ देखें:
> db.queryForPartialObjectDemo.find().pretty();
{ "_id" : ObjectId("5cdfcf55bf3115999ed51206"), "StudentDetails" : [ { "StudentId" : 1, "StudentName" : "Chris" } ] }
{ "_id" : ObjectId("5cdfcf55bf3115999ed51207"), "StudentDetails" : [ { "StudentId" : 1, "StudentName" : "David" } ] }
पहला तरीका: पूर्ण ऑब्जेक्ट मिलान
> db.queryForPartialObjectDemo.find({StudentDetails: {StudentId: 1, "StudentName": "Chris"}});
{ "_id" : ObjectId("5cdfcf55bf3115999ed51206"), "StudentDetails" : [ { "StudentId" : 1, "StudentName" : "Chris" } ] }
नोट: यह सटीक ऑब्जेक्ट मिलान करता है - फील्ड क्रम और अतिरिक्त फील्ड नहीं होने चाहिए।
दूसरा तरीका: डॉट नोटेशन (अनुशंसित)
> db.queryForPartialObjectDemo.find({"StudentDetails.StudentName": "Chris"});
{ "_id" : ObjectId("5cdfcf55bf3115999ed51206"), "StudentDetails" : [ { "StudentId" : 1, "StudentName" : "Chris" } ] }
डॉट नोटेशन के लाभ:
- केवल निर्दिष्ट फील्ड जांचता है, अन्य फील्ड अनदेखे
- सरणी में किसी भी तत्व से मिलान करता है
- अधिक लचीला और पठनीय
- इंडेक्स का उपयोग कर सकता है
जब सरणी में एकाधिक ऑब्जेक्ट हों
यदि सरणी में कई ऑब्जेक्ट हैं और आप विशिष्ट संयोजन चाहते हैं (उदाहरण: StudentId=1 AND StudentName="Chris" एक ही ऑब्जेक्ट में), तो $elemMatch उपयोग करें:
db.collection.find({
StudentDetails: {$elemMatch: {StudentId: 1, StudentName: "Chris"}}
})
यह सुनिश्चित करता है कि दोनों शर्तें एक ही सरणी तत्व में पूरी हों।