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 }

গ্রুপ এবং এগ্রিগেশন

কালেকশন.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 এ পোছার ও সংগ্রহের বস্তু পেতের কোডও এখানে গোপন থাকে এবং ঝালালেখা টিউটোরিয়ালে দেখা যাবে।
	
	// পরিসংখ্যানের বিধান, মঙ্গো ডিবির মৌলিক ব্যাক্তিক সিনট্যাক্স প্রকাশা করার জন্য গোলং ডেটা বিন্যাস ব্যবহার করা।
	// যদি আপনি Golang 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)
	}

	// ফলাফল সেট সংজ্ঞা করুন, সেরা প্রকারের বক্সাটি (একটি মানচিত্র ধরনের ম্যাপের প্রকার) ব্যবহার করে ডিভাইল ফলাফল সংরক্ষণ করা
	var results []bson.M
	// সমস্ত ফলাফল পেতে এবং তা ফলাফল ভেরিয়েবলে ভার্সন করা
	if err = cursor.All(context.TODO(), &results); err != nil {
		log.Fatal(err)
	}
	
	// প্রশ্নের ফলাফলগুলি ব্রাউজ করুন
	for _, result := range results {
		fmt.Printf("id =  %v , total =  %v \n", result["_id"], result["total"])
	}
}

পরামর্শ: আরও MongoDB পরিসংখ্যান বিধানের জন্য, দয়া করে MongoDB পরিবেক্ষণ পাইপলাইন দেখুন।