یہ باب MongoDB کی شماریاتی تجزیے کی تفصیلی وضاحت پیش کرتا ہے، جو عموماً Aggregation Pipeline کے ذریعے حاصل کیا جاتا ہے۔ یہ SQL میں "group by" اسٹیٹمنٹ کی طرح ہے۔ 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)
توضیح:
-
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 Stage
فارمیٹ:
{ $match: { <query> } }
توضیح:
-
<query>
MongoDB کی کوئیری حالات
کوئیری حالات تعین کرنے کے لئے استعمال ہوتا ہے۔ اگر $match
نظرانداز کیا جائے تو یہ ہوگا کہ تمام ڈیٹا کی کوئیری کی جا رہی ہے۔
مشورہ: اگر آپ MongoDB کی کوئیری سنٹیکس سے واقف نہیں ہیں، تو براہ کرم پچھلے بابس کی تشریح کو دیکھیں۔
$group Stage
SQL میں group by
کلوز کے طرح، یہ ڈیٹا کو گروپ بنانے کے لئے اور پھر گروپ بندی کردہ ڈیٹا پر سلسلہ وار شماریاتی حسابات کرنے کے لئے استعمال ہوتا ہے۔
$group کا بنیادی استعمال
سنٹیکس:
{
$group:
{
_id: <expression>, // گروپنگ شرط، مثال کے طور پر: گروپ بائی کس فیلڈ کے لۓ
<field1>: { <accumulator1> : <expression1> }, // ایگریگیشن عمل، آپ ایم ایم ٹو کی ایگریگیشن عمل جوڑ سکتے ہیں
...
}
}
توضیح:
-
- مخصوص شماریاتی انڈیکیٹر کا نام، کل ہو سکتے ہیں -
- ایگریگیشن فنکشن، ایگریگیشن فنکشن سے مشابہ ہے، مثال کے طور پر sum, avg اور دیگر ایگریگیشن فنکشنس، امکان یہ ہے کہ مونگو ڈی بی کی ایگریگیشن فنکشنز کو$ کے ساتھ نام دیا گیا ہے، مثال کے طور پر: $sum, $avg -
- ایگریگیشن فنکشن کا پیرامیٹر، عام طور پر شمار گرانے والی فیلڈ کی قیمت ہوتی ہے، فارمیٹ "$field name" کا استعمال کرکے دستاویز فیلڈ کا حوالہ دیتی ہے
مثال:
db.orders.aggregate([
{
$group: {
_id: "$cust_id",
total: { $sum: "$amount" }, // پہلا حسابنگری انڈیکیٹر ٹوٹل جوڑیں, $sum سماٹنے والے اپریٹر کا استعمال کریں
amount_avg: {$avg: "$amount"} // دوسری حسابنگری انڈیکیٹر اوسط کو استعمال کر کے اوسط قیمتیں حاصل کریں
}
}
])
آؤٹ پٹ:
{ "_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
$گروپ کلرتی فعل
$گروپ کے لئے عام طور پر استعمال ہونے والے کلرتی فعل مندرجہ ذیل ہیں:
آپریٹر | تفصیل | مثال |
---|---|---|
$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" } |
$پش کا مثال
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" } // تمام مختلف رقمی قیمتیں واپس کریں
}
}
]
)
آؤٹپٹ
{ "_id" : "abc1", "all_amount" : [ 25, 50 ] }
{ "_id" : "xyz1", "all_amount" : [ 100, 25, 125 ] }
$سارٹ
$سارٹ مرحلہ عام طور پر آخر میں رکھا جاتا ہے تاکہ کلرٹیٹڈ ڈیٹا کو سارٹ کیا جا سکے۔
فارمیٹ:
{ $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 میں آفسیٹ کے مترادف ہے۔
])