অবজেক্ট ফিল্টার করে নির্দিষ্ট ফিল্ড বের করতে প্রজেকশনের সাথে $filter এবং $match ব্যবহার করুন। একটি কালেকশন তৈরি করুন:
> db.demo507.insertOne({
"Information": [
{"Name":"John","SubjectName":"MySQL"},
{"Name":"Bob","SubjectName":"MongoDB"},
{"Name":"Chris","SubjectName":"MySQL"},
{"Name":"David","SubjectName":"C++"}
]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8836d3987b6e0e9d18f577") }
find().pretty() দিয়ে ডকুমেন্ট দেখান:
> db.demo507.find().pretty();
আউটপুট:
{ "_id" : ObjectId("5e8836d3987b6e0e9d18f577"), "Information" : [ { "Name" : "John", "SubjectName" : "MySQL" }, { "Name" : "Bob", "SubjectName" : "MongoDB" }, { "Name" : "Chris", "SubjectName" : "MySQL" }, { "Name" : "David", "SubjectName" : "C++" } ] }
শুধু "MySQL" সাবজেক্ট 가진 অবজেক্টগুলো ফিল্টার করার কোয়েরি:
> db.demo507.aggregate([
{$match: {"Information.SubjectName" : "MySQL" } },
{$project: {
_id:0,
Information: {
$filter: {
input: '$Information',
as: 'result',
cond: {$eq: ['$$result.SubjectName', 'MySQL']}
}
}
}},
{$project: {Information: { SubjectName:1}}}
]);
আউটপুট:
{ "Information" : [ { "SubjectName" : "MySQL" }, { "SubjectName" : "MySQL" } ] }
ব্যাখ্যা: প্রথমে $match দিয়ে শুধু "MySQL" কন্টেইন করা ডকুমেন্ট সিলেক্ট করা হয়েছে। তারপর $project এবং $filter ব্যবহার করে Information অ্যারেতে শুধু "MySQL" 가진 অবজেক্টগুলো রেখে বাকিগুলো বাদ দেওয়া হয়েছে। চূড়ান্ত প্রজেকশনে শুধু SubjectName ফিল্ড রাখা হয়েছে।