MongoDB অ্যাগ্রিগেশনে $first অপারেটর গ্রুপের প্রথম ডকুমেন্টের ফিল্ড রিটার্ন করে। কিন্তু যদি সেই ফিল্ড null হয়, তবে nullই রিটার্ন হবে। NULL বাদ দিয়ে প্রথম নন-নাল মান পাওয়ার জন্য $match দিয়ে আগে ফিল্টার করে নিতে হয়।
নমুনা ডেটা তৈরি (StudentSubject কিছু null)
> db.conditionalFirstDemo.insertOne({_id:100,"StudentName":"Chris","StudentSubject":null});
{ "acknowledged": true, "insertedId": 100 }
> db.conditionalFirstDemo.insertOne({_id:101,"StudentName":"Chris","StudentSubject":null});
{ "acknowledged": true, "insertedId": 101 }
> db.conditionalFirstDemo.insertOne({_id:102,"StudentName":"Chris","StudentSubject":"MongoDB"});
{ "acknowledged": true, "insertedId": 102 }
> db.conditionalFirstDemo.insertOne({_id:103,"StudentName":"Chris","StudentSubject":"MongoDB"});
{ "acknowledged": true, "insertedId": 103 }
> db.conditionalFirstDemo.insertOne({_id:104,"StudentName":"Chris","StudentSubject":null});
{ "acknowledged": true, "insertedId": 104 }
সব ডকুমেন্ট দেখুন
> db.conditionalFirstDemo.find();আউটপুট:
{
"_id": 100, "StudentName": "Chris", "StudentSubject": null
}
{
"_id": 101, "StudentName": "Chris", "StudentSubject": null
}
{
"_id": 102, "StudentName": "Chris", "StudentSubject": "MongoDB"
}
{
"_id": 103, "StudentName": "Chris", "StudentSubject": "MongoDB"
}
{
"_id": 104, "StudentName": "Chris", "StudentSubject": null
}
অ্যাগ্রিগেশন: StudentSubject null নয় এমন ডকুমেন্ট ফিল্টার করে গ্রুপ করে $first নেওয়া
> db.conditionalFirstDemo.aggregate([
{ "$match": { "StudentSubject": { "$ne": null } } },
{ "$group": {
"_id": "$StudentName",
"StudentSubject": { "$first": "$StudentSubject" }
}
}
]);
আউটপুট (Chris-এর প্রথম নন-নাল সাবজেক্ট):
{ "_id": "Chris", "StudentSubject": "MongoDB" }
ব্যাখ্যা: $match দিয়ে null মানগুলো বাদ দিয়ে পাইপলাইনে পাঠানো হয়েছে। তারপর $group-এ $first দিয়ে প্রথম মেলে মান নেওয়া হয়েছে। $ne: null দিয়ে null বাদ দেওয়া হয়েছে।