MongoDB-তে গ্রুপিংয় আগে সর্ট করে প্রতিটি গ্রুপের প্রথম ডকুমেন্ট (সর্বনিম্ন বা সর্বোচ্চ মানobal) বের করতে $sort → $group → $first: "$$ROOT" প্যাটার্ন ব্যবহার করা হয়।
উদাহরণ: একই id-তে একাধিক এন্ট্রি (Marks ভিন্ন)
> db.demo576.insertOne({id: 101, Name: "Chris", Marks: 45});
> db.demo576.insertOne({id: 101, Name: "John", Marks: 55});
> db.demo576.insertOne({id: 101, Name: "John", Marks: 65});
> db.demo756.insertOne({id: 102, Name: "David", Marks: 37});
> db.demo576.insertOne({id: 102, Name: "David", Marks: 75});
পাইপলাইন: id অনুযায়ী গ্রুপ, Marks অ্যাসেন্ডিং সর্ট, প্রথম (সর্বনিম্ন) রেখে বাকি বাদ
> var query = [
{ $sort: { Marks: 1 } },
{ $group: { _id: "$id", out: { $first: "$$ROOT" } } },
{ $project: { _id: "$out._id", id: "$out.id", Name: "$out.Name", MinMarks: "$out.Marks" } }
];
> db.demo576.aggregate(query);
আউটপুট:
{ "_id" : ..., "id" : 101, "Name" : "Chris", "MinMarks" : 45 }
{ "_id" : ..., "id" : 102, "Name" : "David", "MinMarks" : 37 }
মূল কৌশল:
$sortপূর্বে রাখা জরুরি - অন্যথায় $first অনির্ধারিত ডকুমেন্ট নেবে$$ROOT- পুরো ডকুমেন্ট রেফার করে$project- আউটপুট শেপ করতে (শুধু প্রয়োজনীয় ফিল্ড)
এই প্যাটার্ন "প্রতিটি গ্রুপের টপ-১" (Top-1 per group) কোয়েরির জন্য অত্যন্ত জনপ্রিয়।