SQL کی طرح MongoDB بھی Group by تجزیہ کو مدد فراہم کرتا ہے۔ یہ باب پیش کرتا ہے کہ Golang استعمال کرتے ہوئے MongoDB ڈیٹا کے احصائی تجزیہ کو کیسے لاگو کیا جاتا ہے۔
ماقبلِ ضروری ہدایت
براہ کرم مندرجہ ذیل ماقبلِ ضروری ہدایت پڑھیں:
ٹیسٹ ڈیٹا
آرڈر کلیکشن میں ڈیٹا مندرجہ ذیل ہے:
{ _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 }
گروپنگ اور احصاء
Collection.Aggregate فنکشن کا استعمال کر کے احصاءی کوئیریاں کریں۔
MongoDB میں احصائی تجزیے کا نمونہ درج ذیل ہے:
[
{ $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
یہاں دی گئی ہے کہ گولانگ میں یہ کیسے حاصل ہوگا:
package main
import (
"context"
"fmt"
"log"
"time"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func main() {
var coll *mongo.Collection
// MongoDB سے منسلک ہونے کے لئے کوڈ اور کلیکشن آبجکٹ حاصل کرنے کے کوڈ یہاں حاصل کیا گیا ہے۔
// احصائی تجزیے کا عبارتی روپ، جو مونگو ڈیٹا کی اصل سنٹیکس کو ظاہر کرنے کے لئے گولانگ ڈیٹا سچر کا استعمال کر رہا ہے۔
// اگر آپ گولانگ مونگو ڈیٹا ماڈل کو نہیں جانتے تو براہ کرم پچھلے حصوں کا حوالہ دیں۔
pipeline := mongo.Pipeline{
{{"$match", bson.D{{"status", "A"}}}},
{{"$group", bson.D{{"_id", "$cust_id"}, {"total", bson.D{{"$sum", "$amount"}}}}}},
{{"$sort", bson.D{{"total", -1}}}
}
// ٹائم آؤٹ سیٹ کریں
opts := options.Aggregate().SetMaxTime(2 * time.Second)
// احصائی تجزیے کریں
cursor, err := coll.Aggregate(
context.TODO(), // سیاق و سباق پیرامیٹر
pipeline, // احصائی تجزیہ کا بیان
opts // اختیاری پیرامیٹر
)
if err != nil {
log.Fatal(err)
}
// نتیجہ کا مجموعہ، query نتائج کو ذخیرہ کرنے کے لئے bson.M نوع کا (ایک قسم کی نقشے کی قسم) استعمال کرتے ہیں
var results []bson.M
// تمام نتائج حاصل کریں اور انہیں نتائج متغیر میں ذخیرہ کریں
if err = cursor.All(context.TODO(), &results); err != nil {
log.Fatal(err)
}
// query نتائج سے گزریں
for _, result := range results {
fmt.Printf("id = %v , total = %v \n", result["_id"], result["total"])
}
}
مشورہ: مزید MongoDB احصاء سنٹیکس کے لئے براہ کرم MongoDB Aggregation Pipeline حاشیہ دیں۔