MongoDB-এ $setUnion ব্যবহার করে একাধিক ফিল্ডের মান এক অ্যারে একত্রিত করা
$setUnion অপারেটর একাধিক সেট থেকে অনন্য (unique) মানগুলো একত্রিত করে একটি অ্যারে তৈরি করে। এখানে $group এবং $addToSet ব্যবহার করে প্রতিটি ফিল্ডের অনন্য মানগুলো সংগ্রহ করা হয়েছে।
নমুনা ডেটা তৈরি
> db.demo244.insertOne({"Value1":10,"Value2":20});
> db.demo244.insertOne({"Value1":20,"Value2":30});
সকল ডকুমেন্ট দেখানো
> db.demo244.find();
আউটপুট:
{ "_id" : ObjectId(...), "Value1" : 10, "Value2" : 20 }
{ "_id" : ObjectId(...), "Value1" : 20, "Value2" : 30 }
Aggregation Pipeline
> db.demo244.aggregate([
{
$group: {
_id: null,
v1: { $addToSet: "$Value1" },
v2: { $addToSet: "$Value2" }
}
},
{
$project: {
AllValues: { $setUnion: ["$v1", "$v2"] }
}
}
]);
আউটপুট:
{ "_id" : null, "AllValues" : [ 10, 20, 30 ] }
ধাপে ধাপে ব্যাখ্যা
- $group: সকল ডকুমেন্ট গ্রুপ করে (null _id মানে এক গ্রুপ),
$addToSetদিয়ে প্রতিটি ফিল্ডের অনন্য মানগুলো সংগ্রহ করে - $project:
$setUnionদিয়ে দুটি অ্যারে (v1এবংv2) মিলিয়ে ডুপ্লিকেট বাদ দিয়ে একটি অ্যারে তৈরি করে
বিকল্প পদ্ধতি: $concatArrays + $reduce
যদি ডুপ্লিকেট রাখতে চান:
> db.demo244.aggregate([
{ $project: { combined: { $concatArrays: ["$Value1", "$Value2"] } } },
{ $unwind: "$combined" },
{ $group: { _id: null, AllValues: { $push: "$combined" } } }
]);
নোট: উপরের উদাহরণে Value1 এবং Value2 সিংগেল ভ্যালু, অ্যারে নয়। আসল ব্যবহারে যদি এগুলো অ্যারে হয় তবে $reduce বা $map ব্যবহার করতে হতে পারে।