MongoDB অ্যাগ্রিগেশনে $$ROOT সিস্টেম ভেরিয়েবলটি বর্তমান প্রক্রিয়াধীন রুট ডকুমেন্টকে রেফার করে। $first অ্যাকিউমুলেটর দিয়ে গ্রুপের প্রথম ডকুমেন্ট (রুট রেফারেন্সসহ) সংরক্ষণ করা যায়।
উদাহরণ: একই নাম, বয়স, কিন্তু ভিন্ন ক্রিয়েট ডেট
> db.demo582.insertOne({FirstName: "Chris", Age: 21, createDate: new ISODate("2020-01-10")});
> db.demo582.insertOne({FirstName: "Chris", Age: 21, createDate: new ISODate("2020-04-21")});
> db.demo582.insertOne({FirstName: "Chris", Age: 22, createDate: new ISODate("2020-02-11")});
> db.demo582.insertOne({FirstName: "Chris", Age: 22, createDate: new ISODate("2020-01-12")});
অ্যাগ্রিগেশন: FirstName অনুযায়ী গ্রুপ, ম্যাক্স ডেট, কাউন্ট, এবং প্রথম ডকুমেন্ট
> db.demo582.aggregate([
{ $group: {
_id: "$FirstName",
MaximumDate: { $max: "$createDate" },
count: { $sum: 1 },
details: { $first: "$$ROOT" }
}},
{ $project: {
MaximumDate: 1, count: 1,
details: { _id: "$_id", FirstName: "$details.FirstName", Age: "$details.Age" }
}}
]);
আউটপুট:
{ "_id" : "Chris", "MaximumDate" : ISODate("2020-04-21T00:00:00Z"), "count" : 4, "details" : { "_id" : "Chris", "FirstName" : "Chris", "Age" : 21 } }
ব্যাখ্যা:
$$ROOT- পাইপলাইনে প্রবেশ করার সময় পুরো ডকুমেন্টকে রেফার করে$first: "$$ROOT"- গ্রুপের প্রথম ডকুমেন্ট (সহ সব ফিল্ড) সংরক্ষণ করে$project- আউটপুট শেপ করুন (শুধু প্রয়োজনীয় ফিল্ড রাখুন)- সর্ট না করলে "প্রথম" ডকুমেন্ট অনির্ধারিত হতে পারে; আগে
$sortব্যবহার করুন