এই অধ্যায়টি MongoDB পরিসংখ্যান বিশদ ব্যাখ্যা প্রদান করে, যা মূলত Aggregation Pipeline এর মাধ্যমে অর্জন করা হয়। এটি এসকিউএলের "গ্রুপ বাই" বিবৃতিকে মনোনীত করে। MongoDB shell এ, পরিসংখ্যান বিশ্লেষণটি db.collection.aggregate()
ফাংশন ব্যবহার করে সম্পাদিত হয়।
প্রাথমিক টিউটোরিয়াল
সাধারণ পদক্ষেপ
-
$match
ব্যবহার করুন টার্গেট উপাত্ত ফিল্টার করার জন্য -
$group
ব্যবহার করুন ডেটা গ্রুপ করে ও গণনা করার জন্য - ফলাফল সাজানোর জন্য
$sort
ব্যবহার করুন (ঐচ্ছিক)
টেস্ট ডেটা
orders
কালেকশনে ডেটা নিম্নলিখিত:
{ _id: 1, cust_id: "abc1", ord_date: ISODate("2012-11-02T17:04:11.102Z"), status: "A", amount: 50 }
{ _id: 2, cust_id: "xyz1", ord_date: ISODate("2013-10-01T17:04:11.102Z"), status: "A", amount: 100 }
{ _id: 3, cust_id: "xyz1", ord_date: ISODate("2013-10-12T17:04:11.102Z"), status: "D", amount: 25 }
{ _id: 4, cust_id: "xyz1", ord_date: ISODate("2013-10-11T17:04:11.102Z"), status: "D", amount: 125 }
{ _id: 5, cust_id: "abc1", ord_date: ISODate("2013-11-12T17:04:11.102Z"), status: "A", amount: 25 }
aggregate ফাংশন
db.collection.aggregate(pipeline)
ব্যাখ্যা:
- পাইপলাইনটি একটি অ্যারে প্যারামিটার নিয়ে, যেখানে প্রতিটি উপাদান একটি প্রসেসিং স্টেজ প্রতিনিধি করে।
উদাহরণ
db.orders.aggregate([
{ $match: { status: "A" } }, // প্রথম স্টেজ
{ $group: { _id: "$cust_id", total: { $sum: "$amount" } } }, // দ্বিতীয় স্টেজ
{ $sort: { total: -1 } } // তৃতীয় স্টেজ
])
সমতুল্য SQL
select sum(amount) as total from orders
where status="A"
group by cust_id
order by total desc
$match স্টেজ
ফরম্যাট:
{ $match: { <query> } }
ব্যাখ্যা:
-
<query>
MongoDB কুয়েরি শর্তাদি
কুয়েরি শর্তাদি নির্ধারণ করতে ব্যবহৃত হয়। যদি $match
অগ্রাহ্য হয়, তবে এটি সব ডেটা উপর কুয়েরি করা মনে হয়।
পরামর্শ: যদি আপনি MongoDB কুয়েরি সিনট্যাক্স অপরিচিত হন, তাহলে আগের অধ্যায় দেখুন।
$group স্টেজ
এসকিউএলের group by
ক্লজ এর মত, এটি ডেটা গ্রুপ করার জন্য ব্যবহৃত এবং তারপরে গ্রুপ করা ডেটা সাথে আগামীকালের পরিসংখ্যানিক গণনা পরিচালনা করার জন্য।
$group এর বিস্তারিত ব্যবহার
সিনট্যাক্স:
{
$group:
{
_id: <expression>, // গ্রুপ করার শর্ত, উদাহরণ: কোনও ফিল্ড দ্বারা গ্রুপ করুন
<field1>: { <accumulator1> : <expression1> }, // আগ্রেগেশন অপারেশন, আপনি পাঁচটির আগ্রেগেশন অপারেশন যোগ করতে পারেন
...
}
}
ব্যাখ্যা:
-
- কাস্টম পরিসংখ্যানিক নির্দিষ্টকরণের নাম, মোট N হতে পারে -
- বিশেষতায়িতকরণ কাজ, এসকিউএলের মতো sum, avg এবং অন্যান্য গণনা কার্য, পার্থক্যটি হ'ল মংগোডিবির পরিসংখ্যানিক কার্যগুলির পরিসংখ্যানিক কার্যগুলিকে $ এর অমান্য সহিত নামকরণ করা হয়, উদাহরণ: $sum, $avg -
- পরিসংখ্যানিক কার্যের প্যারামিটার, সাধারণভাবে যেসব ফিল্ডের মান গণনা করতে, ডকুমেন্ট ফিল্ডগুলির রেফারেন্স ফরম্যাট ব্যবহার করে "$field name" ফরম্যাটে
উদাহরণ:
db.orders.aggregate([
{
$group: {
_id: "$cust_id",
total: { $sum: "$amount" }, // প্রথম গণনা করা সংকেতক মোট, $sum যোগ অপারেটর ব্যবহার করে
amount_avg: {$avg: "$amount"} // দ্বিতীয় গণনা করা সংকেতক ঔসত, $avg গড় গণনা অপারেটর ব্যবহার করে
}
}
])
আউটপুট:
{ "_id" : "abc1", "total" : 75, "amount_avg" : 37.5 }
{ "_id" : "xyz1", "total" : 250, "amount_avg" : 83.33333333333333 }
সমতুল্য SQL:
select
sum(amount) as total,
avg(amount) as amount_avg
from orders
group by cust_id
$group সংকলন ফাংশনগুলি
$group এর জন্য সাধারণভাবে ব্যবহৃত সংকলন ফাংশনগুলি নিম্নলিখিতঃ
অপারেটর | বর্ণনা | উদাহরণ |
---|---|---|
$avg | গড় হিসাব | {$avg: "$amount"} |
$sum | যোগফল | {$sum: "$amount"} |
$max | সর্বাধিক মান | {$max: "$amount"} |
$min | সর্বনিম্ন মান | {$min: "$amount"} |
$first | সংকলন পরে তথ্য ফিরিয়ে দেয়, প্রথম ডকুমেন্টের বিষয়বস্তু | {$first: "$amount"} |
$last | সংকলন পরে তথ্য ফিরিয়ে দেয়, শেষ ডকুমেন্টের বিষয়বস্তু | {$last: "$amount"} |
$push | সংকলন পরে তথ্য ফিরিয়ে দেয় | {$push: { ord_date: "$ord_date", amount: "$amount" }} |
$addToSet | সংকলন পরে তথ্য ফিরিয়ে দেয়, $push থেকে ভিন্ন হিসেবে এটি অনন্যদূষিত ডাটা প্রদান করে | {$addToSet: "$amount"} |
$push এর উদাহরণ
db.orders.aggregate(
[
{
$group:
{
_id: "$cust_id",
all: { $push: { ord_date: "$ord_date", amount: "$amount" } } // ord_date এবং amount ফিল্ডের মান
}
}
]
)
আউটপুট
{ "_id" : "abc1", "all" : [ { "ord_date" : "2021-04-18 00:00:00", "amount" : 50 }, { "ord_date" : "2021-04-21 00:00:00", "amount" : 25 } ] }
{ "_id" : "xyz1", "all" : [ { "ord_date" : "2021-04-18 00:00:00", "amount" : 100 }, { "ord_date" : "2021-04-20 00:00:00", "amount" : 25 }, { "ord_date" : "2021-04-21 00:00:00", "amount" : 125 } ] }
$addToSet এর উদাহরণ
db.orders.aggregate(
[
{
$group:
{
_id: "$cust_id",
all_amount: { $addToSet: "$amount" } // সকল বিভিন্ন amount মান প্রদান করে
}
}
]
)
আউটপুট
{ "_id" : "abc1", "all_amount" : [ 25, 50 ] }
{ "_id" : "xyz1", "all_amount" : [ 100, 25, 125 ] }
$sort:
$sort এর স্টেজটি সাধারণভাবে সংকলিত ডাটা সর্ট করার জন্য শেষে রাখা হয়।
ফরম্যাট:
{ $sort: { <field1>: <sort order>, <field2>: <sort order> ... } }
ব্যাখ্যা:
-
, - সর্ট করার জন্য ফিল্ডের নাম, এটি একাধিক ফিল্ড সমর্থন করে। -
- সর্টিং এর অবস্থান, অবশ্যই ডেসেন্ডিং জন্য -1, আসেন্ডিং জন্য 1।
উদাহরণ:
db.orders.aggregate([
{ $match: { status: "A" } },
{ $group: { _id: "$cust_id", total: { $sum: "$amount" } } },
{ $sort: { total: -1 } }
])
সংকলন পেজিনেশন
আমরা $limit এবং $skip অপারেটর ব্যবহার করে পেজিনেশন পাই।
উদাহরণ:
db.orders.aggregate([
{ $match: { status: "A" } },
{ $group: { _id: "$cust_id", total: { $sum: "$amount" } } },
{ $sort: { total: -1 } },
{ $limit: 5 }, // ফেরত এসের রেকর্ডের সংখ্যা সীমিত করে, সাধারণভাবে পেজ সাইজের মতো।
{ $skip: 1 } // নির্দিষ্ট সংখ্যক রেকর্ড বাদ দিয়ে পাসান, SQL এর অফসেটের মতো।
])