MongoDB में सरणी फील्ड के अंदर नेस्टेड फील्ड के आधार पर दस्तावेज़ क्वेरी करने और सरणी लौटाने के लिए, डॉट नोटेशन का उपयोग करें: { "arrayField.nestedField": value }।
उदाहरण: क्लाइंट विवरण संग्रह
> db.demo38.insertOne({"ClientDetails":[{"ClientId":101,"ClientName":"Chris"}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e176abccfb11e5c34d898d9") }
> db.demo38.insertOne({"ClientDetails":[{"ClientId":102,"ClientName":"David"}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e176ac7cfb11e5c34d898da") }
> db.demo38.insertOne({"ClientDetails":[{"ClientId":103,"ClientName":"Mike"}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e176ad0cfb11e5c34d898db") }
दस्तावेज़ देखना
> db.demo38.find();
आउटपुट: प्रत्येक में एक-तत्व सरणी वाले तीन दस्तावेज़।
सरणी फील्ड द्वारा क्वेरी
> db.demo38.find({"ClientDetails.ClientName":"David"});
आउटपुट:
{ "_id" : ObjectId("5e176ac7cfb11e5c34d898da"), "ClientDetails" : [ { "ClientId" : 102, "ClientName" : "David" } ] }
व्याख्या
ClientDetails.ClientNameप्रत्येक दस्तावेज़ मेंClientDetailsसरणी के अंदरClientNameफील्ड तक पहुंचता है।- MongoDB सरणी में किसी भी तत्व से मेल खाता है।
- पूरा दस्तावेज़ लौटाया जाता है (पूरी सरणी सहित)।
केवल मिलान वाला तत्व प्रोजेक्ट करें ($elemMatch प्रोजेक्शन)
> db.demo38.find(
{ "ClientDetails.ClientName": "David" },
{ "ClientDetails": { $elemMatch: { "ClientName": "David" } } }
);
केवल मिलान वाला सरणी तत्व लौटाता है।
एग्रीगेशन विकल्प ($unwind + $match)
> db.demo38.aggregate([
{ $unwind: "$ClientDetails" },
{ $match: { "ClientDetails.ClientName": "David" } },
{ $replaceRoot: { newRoot: "$ClientDetails" } }
]);
मिलान वाला ऑब्जेक्ट सीधे लौटाता है (दस्तावेज़ रैपर के बिना)।