सरणी के अंदर नेस्टेड ऑब्जेक्ट के विशिष्ट फील्ड्स के आधार पर दस्तावेज़ क्वेरी करने के लिए, डॉट नोटेशन के साथ $all ऑपरेटर का उपयोग करें। यह उन दस्तावेज़ों को ढूंढता है जहां सरणी में सभी निर्दिष्ट मान वाले तत्व हों।
उदाहरण: उपयोगकर्ता विवरण संग्रह
> db.demo25.insertOne({
"Details":[
{"UserId":"Carol101","UserName":"Carol"},
{"UserId":"David102","UserName":"David"}
]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e14c86e22d07d3b95082e77") }
> db.demo25.insertOne({
"Details":[
{"UserId":"Chris101","UserName":"Chris"},
{"UserId":"Mike102","UserName":"Mike"}
]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e14c86f22d07d3b95082e78") }
दस्तावेज़ देखना
> db.demo25.find();
आउटपुट:
{
"_id" : ObjectId("5e14c86e22d07d3b95082e77"),
"Details" : [
{ "UserId" : "Carol101", "UserName" : "Carol" },
{ "UserId" : "David102", "UserName" : "David" }
]
}
{
"_id" : ObjectId("5e14c86f22d07d3b95082e78"),
"Details" : [
{ "UserId" : "Chris101", "UserName" : "Chris" },
{ "UserId" : "Mike102", "UserName" : "Mike" }
]
}
कई मानों के लिए क्वेरी ($all के साथ)
ऐसे दस्तावेज़ ढूंढें जहां Details सरणी में दोनों "Carol101" और "David102" UserId वाले तत्व हों:
> db.demo25.findOne({ "Details.UserId":{$all : ["Carol101","David102"]}});
आउटपुट:
{
"_id" : ObjectId("5e14c86e22d07d3b95082e77"),
"Details" : [
{ "UserId" : "Carol101", "UserName" : "Carol" },
{ "UserId" : "David102", "UserName" : "David" }
]
}
महत्वपूर्ण नोट्स
$allसरणी फील्ड पर काम करता है और उन दस्तावेज़ों से मेल खाता है जहां सरणी में प्रत्येक निर्दिष्ट मान के लिए कम से कम एक तत्व हो।- यह एक ही तत्व में सभी मानों की आवश्यकता नहीं है; अलग-अलग तत्व अलग-अलग मानों को संतुष्ट कर सकते हैं।
- सटीक ऑब्जेक्ट मिलान के लिए,
$elemMatchका उपयोग करें। - मूल उदाहरण में
$findOne()का उल्लेख है, लेकिन सही मेथडfindOne()है (बिना $ के)।