$lookup পাইপলাইন সিনট্যাক্স দিয়ে ObjectId অ্যারে জয়েন
MongoDB Aggregation-এ $lookup ব্যবহার করে একটি কালেকশনের ObjectId অ্যারেকে অন্য কালেকশনের ডকুমেন্টসের সাথে জয়েন করা যায়। পাইপলাইন সিনট্যাক্স (MongoDB 3.6+) এ $expr এবং $in ব্যবহার করে এটি করা হয়।
প্রথম কালেকশন (demo395) তৈরি
> db.demo395.insertOne({Name:"Chris"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5e782317aa3ef9ab8ab207") }
> db.demo395.insertOne({Name:"David"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5e782317aa3ef9ab8ab208") }
দ্বিতীয় কালেকশন (demo396) তৈরি - ObjectId অ্যারে সহ
> db.demo396.insertOne({"details" : [
ObjectId("5e5e782317aa3ef9ab8ab207"),
ObjectId("5e5e782317aa3ef9ab8ab208")
] });
{ "acknowledged" : true, "insertedId" : ObjectId("5e5e787817aa3ef9ab8ab209") }
দুই কালেকশন দেখানো
> db.demo395.find();
{ "_id" : ObjectId("5e5e782317aa3ef9ab8ab207"), "Name" : "Chris" }
{ "_id" : ObjectId("5e5e782317aa3ef9ab8ab208"), "Name" : "David" }
> db.demo396.find();
{ "_id" : ObjectId("5e5e787817aa3ef9ab8ab209"), "details" : [ ObjectId("5e5e782317aa3ef9ab8ab207"), ObjectId("5e5e782317aa3ef9ab8ab208") ] }
$lookup পাইপলাইন সিনট্যাক্স দিয়ে জয়েন
> db.demo396.aggregate([
{ "$lookup": {
"from": "demo395",
"let": { "details": "$details" },
"pipeline": [
{ "$match": { "$expr": { "$in": [ "$_id", "$$details" ] } } }
],
"as": "output"
}}
])
ফলাফল (output ফিল্ডে জয়েন করা ডকুমেন্টস):
ব্যাখ্যা: let দিয়ে details অ্যারে ভেরিয়েবলে নেওয়া হয়েছে। পাইপলাইনে $match এবং $expr: {$in: ["$_id", "$$details"]} দিয়ে demo395-এ থাকা _id যেগুলো details অ্যারেতে আছে সেগুলো ফিল্টার করা হয়েছে। এটি লেফ্ট আউটার জয়েনের মতো কাজ করে।