ভূমিকা
MongoDB-এ দুটি আলাদা ফিল্ডের ভ্যালুগুলো মিলিয়ে ডুপ্লিকেট বাদ দিয়ে সোর্টেড অ্যারে তৈরি করতে এগ্রিগেশন ফ্রেমওয়ার্কের $setUnion অপারেটর ব্যবহার করা হয়।
নমুনা ডেটা তৈরি
sortedArrayWithDistinctDemo কালেকশনে তিনটি ডকুমেন্ট ইনসার্ট করা হয়েছে, যেগুলোতে value1 এবং value2 নামক দুটি নümerিক ফিল্ড রয়েছে।
> db.sortedArrayWithDistinctDemo.insertOne( { value1: 4, value2: 5} );
{ "acknowledged" : true, "insertedId" : ObjectId("5cc690b99cb58ca2b005e666") }
> db.sortedArrayWithDistinctDemo.insertOne( {value1: 5, value2: 6} );
{ "acknowledged" : true, "insertedId" : ObjectId("5cc690b99cb58ca2b005e667") }
> db.sortedArrayWithDistinctDemo.insertOne( {value1: 7, value2: 4} );
{ "acknowledged" : true, "insertedId" : ObjectId("5cc690b99cb58ca2b005e668") }
ডকুমেন্ট প্রদর্শন
> db.sortedArrayWithDistinctDemo.find().pretty();
আউটপুট
{ "_id" : ObjectId("5cc690b99cb58ca2b005e666"), "value1" : 4, "value2" : 5 }
{ "_id" : ObjectId("5cc690b99cb58ca2b005e667"), "value1" : 5, "value2" : 6 }
{ "_id" : ObjectId("5cc690b99cb58ca2b005e668"), "value1" : 7, "value2" : 4 }
এগ্রিগেশন কোয়েরি
$group দিয়ে দুটি ফিল্ডের ভ্যালু দুটি আলাদা অ্যারে হিসেবে কালেক্ট করা হয়েছে, তারপর $project স্টেজে $setUnion ব্যবহার করে দুটি অ্যারে মার্জ করে ডুপ্লিকেট রিমুভ করা হয়েছে। MongoDB-এ $setUnion স্বয়ংক্রিয়ভাবেই সোর্টেড রেজাল্ট রিটার্ন করে।
> db.sortedArrayWithDistinctDemo.aggregate( [ { "$group": { "_id": null, "value1": { "$push": "$value1" }, "value2": { "$push": "$value2" }}}, { "$project": { "_id": 0, "bothValues": { "$setUnion": [ "$value1", "$value2" ] }}} ] );
ফলাফল
{ "bothValues" : [ 4, 5, 6, 7 ] }
নোট: $setUnion সেট থিওরির ইউনিয়ন অপারেশন করে এবং রেজাল্ট অ্যাসেন্ডিং অর্ডারে সোর্টেড থাকে।