Aggregation Pipeline ব্যবহার
ফিল্ডের যে মান গুলো একাধিকবার রিপিট হয়েছে (ডুপ্লিকেট), সেগুলো বের করতে aggregate() এর $group এবং $match ব্যবহার করা হয়।
উদাহরণ: ডকুমেন্ট তৈরি (UserName-এ ডুপ্লিকেট আছে)
> db.findAllNonDistinctDemo.insertOne({"UserName":"John","UserAge":28});
{ "acknowledged" : true, "insertedId" : ObjectId("5c995078863d6ffd454bb647") }
> db.findAllNonDistinctDemo.insertOne({"UserName":"Larry","UserAge":21});
{ "acknowledged" : true, "insertedId" : ObjectId("5c995081863d6ffd454bb648") }
> db.findAllNonDistinctDemo.insertOne({"UserName":"Larry","UserAge":23});
{ "acknowledged" : true, "insertedId" : ObjectId("5c995089863d6ffd454bb649") }
> db.findAllNonDistinctDemo.insertOne({"UserName":"David","UserAge":22});
{ "acknowledged" : true, "insertedId" : ObjectId("5c995093863d6ffd454bb64a") }
> db.findAllNonDistinctDemo.insertOne({"UserName":"John","UserAge":26});
{ "acknowledged" : true, "insertedId" : ObjectId("5c99509d863d6ffd454bb64b") }
> db.findAllNonDistinctDemo.insertOne({"UserName":"Robert","UserAge":24});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9950a7863d6ffd454bb64c") }
> db.findAllNonDistinctDemo.insertOne({"UserName":"Robert","UserAge":25});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9950b1863d6ffd454bb64d") }
> db.findAllNonDistinctDemo.insertOne({"UserName":"Mike","UserAge":29});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9950bc863d6ffd454bb64e") }
Aggregation কুয়েরি
> db.findAllNonDistinctDemo.aggregate([
{ $group: { "_id": "$UserName", "Counter": { $sum: 1 } } },
{ $match: { "Counter": { $gt: 1 } } }
]).pretty();
আউটপুট:
{ "_id" : "Robert", "Counter" : 2 }
{ "_id" : "Larry", "Counter" : 2 }
{ "_id" : "John", "Counter" : 2 }
পাইপলাইন ব্যাখ্যা
$group- UserName দিয়ে গ্রুপ করে কাউন্ট করে$match- কাউন্ট > 1 যেগুলো (ডুপ্লিকেট)
টিপস: পুরো ডকুমেন্ট চাইলে $$ROOT বা $push ব্যবহার করে ডকুমেন্ট গুলো সংরক্ষণ করুন।