MongoDB Aggregation Pipeline-এ $ifNull এবং $setIntersection ব্যবহার করে একটি অ্যারেতে নির্দিষ্ট মান (যেমন "David") আছে কিনা যাচাই করে, ফলাফল হিসেবে বুলিয়ান (true/false) ফিল্ড যোগ করা যায়। এটি NULL বা অনুপস্থিত ফিল্ড হ্যান্ডল করার জন্যও কার্যকর।
উদাহরণ: কালেকশন ও ডেটা তৈরি
> db.demo542.insertOne({"ListOfName":["Chris","David"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8cabc6ef4dcbee04fbbc17") }
> db.demo542.insertOne({"ListOfName":null});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8cabc8ef4dcbee04fbbc18") }
> db.demo542.insertOne({"ListOfName":["David"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8cabd3ef4dcbee04fbbc19") }
> db.demo542.insertOne({"Name":"John"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8cabdaef4dcbee04fbbc1a") }
সব ডকুমেন্ট দেখানো
> db.demo542.find();
আউটপুট:
{ "_id" : ObjectId("5e8cabc6ef4dcbee04fbbc17"), "ListOfName" : [ "Chris", "David" ] }
{ "_id" : ObjectId("5e8cabc8ef4dcbee04fbbc18"), "ListOfName" : null }
{ "_id" : ObjectId("5e8cabd3ef4dcbee04fbbc19"), "ListOfName" : [ "David" ] }
{ "_id" : ObjectId("5e8cabdaef4dcbee04fbbc1a"), "Name" : "John" }
Aggregation কোয়েরি: "David" আছে কিনা যাচাই করে matched ফিল্ড যোগ করা
> var id = "David";
> db.demo542.aggregate([
{
"$project": {
"matched": {
"$eq": [
{ "$size": {
"$ifNull": [
{ "$setIntersection": [ "$ListOfName", [id] ] },
[]
]
}},
1
]
}
}
}
])
কোয়েরির ব্যাখ্যা
$setIntersection: [ "$ListOfName", [id] ]—ListOfNameঅ্যারেতেid("David") আছে কিনা চেক করে। যদি থাকে, তবে সেটে "David" রिटার্ন করবে, না থাকলে খালি অ্যারে।$ifNull: [ ..., [] ]— যদিListOfNamenull থাকে বা ফিল্ডটি অনুপস্থিত থাকে, তবে খালি অ্যারে[]রিটার্ন করবে।$size: ...— ফলাফলের সাইজ বের করবে (১ বা ০)।$eq: [ ..., 1 ]— যদি সাইজ ১ হয় (মানে "David" পাওয়া গেল), তবেtrue, অন্যথায়false।
আউটপুট
{ "_id" : ObjectId("5e8cabc6ef4dcbee04fbbc17"), "matched" : true }
{ "_id" : ObjectId("5e8cabc8ef4dcbee04fbbc18"), "matched" : false }
{ "_id" : ObjectId("5e8cabd3ef4dcbee04fbbc19"), "matched" : true }
{ "_id" : ObjectId("5e8cabdaef4dcbee04fbbc1a"), "matched" : false }
মূল পয়েন্টসমূহ
$ifNullNULL বা মিসিং ফিল্ড হ্যান্ডল করতে সাহায্য করে।$setIntersectionদুটি অ্যারোর কমন এলিমেন্ট বের করে।- এই প্যাটার্নটি যেকোনো অ্যারে ফিল্ডে নির্দিষ্ট মান খোঁজার জন্য ব্যবহার করা যায়।