কম্পিউটার টিউটোরিয়াল

MongoDB-তে $group-এ সর্ট করে প্রথম দুটি ফিল্ড বের করা ($first + $$ROOT)

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) কোয়েরির জন্য অত্যন্ত জনপ্রিয়।

  1. MongoDB-তে শুধু ফিল্ড নাম কুয়েরি করে শুধু _id প্রদর্শন

  2. MongoDB-এ অ্যারে থেকে প্রথম কিছু এলিমেন্ট বাদ দিয়ে বাকি দেখানো ($slice)

  3. MongoDB-তে ন্যাচারেল অর্ডার দিয়ে সর্ট করা এবং আইটেমগুলো রিভার্স করা

  4. MongoDB অ্যাগ্রিগেশন দিয়ে সবচেয়ে কম মার্কসuage वाले দুটি ডকুমেন্ট বের করা