MongoDB में $map का उपयोग करके ऑब्जेक्ट्स के ऐरे से केवल मान निकालना
MongoDB एग्रीगेशन में $map ऑपरेटर का उपयोग करके ऑब्जेक्ट्स के ऐरे को ट्रांसफॉर्म करें और केवल वांछित फील्ड्स के मानों का ऐरे बनाएं।
उदाहरण: संग्रह और दस्तावेज़ बनाना
> db.demo411.insertOne(
{
"Information" : [
{ "Name1" : "Chris", "Name2" : "David" },
{ "Name1" : "John", "Name2" : "John" }
]
}
);
{ "acknowledged" : true, "insertedId" : ObjectId("5e70f19715dc524f70227682") }
दस्तावेज़ देखना
> db.demo411.find();
आउटपुट:
{ "_id" : ObjectId("5e70f19715dc524f70227682"), "Information" : [ { "Name1" : "Chris", "Name2" : "David" }, { "Name1" : "John", "Name2" : "John" } ] }
केवल Name1 और Name2 मानों का ऐरे प्राप्त करना
> db.demo411.aggregate([
{$project : {
_id : 0,
Information : {
$map : {
input : "$Information",
as : "out",
in : ["$$out.Name1", "$$out.Name2"]
}
}
}}
])
आउटपुट:
{ "Information" : [ [ "Chris", "David" ], [ "John", "John" ] ] }
व्याख्या:
$map- इनपुट ऐरे के प्रत्येक एलिमेंट को ट्रांसफॉर्म करता हैinput: "$Information"- स्रोत ऐरेas: "out"- प्रत्येक एलिमेंट के लिए वेरिएबल (यहां प्रत्येक ऑब्जेक्ट)in: ["$$out.Name1", "$$out.Name2"]- आउटपुट ऐरे के लिए नया मान (दो मानों का ऐरे)$$out.Name1- वर्तमान एलिमेंट का Name1 फील्ड
अन्य उपयोगी पैटर्न:
// केवल एक फील्ड के मान
in: "$$out.Name1"
// आउटपुट: [ "Chris", "John" ]
// ऑब्जेक्ट के रूप में
in: { first: "$$out.Name1", second: "$$out.Name2" }
// आउटपुट: [ {first: "Chris", second: "David"}, {first: "John", second: "John"} ]
// शर्त के साथ
in: { $cond: [{$eq: ["$$out.Name1", "Chris"]}, "$$out", "SKIP"] }
// फिर $filter से "SKIP" हटाएं
$map vs $project: $map ऐरे ट्रांसफॉर्मेशन के लिए है; $project दस्तावेज़ फील्ड्स आकार देने के लिए।