কম্পিউটার টিউটোরিয়াল

MongoDB-এ নেস্টেড $group ও $sum দিয়ে প্রোডাক্ট আইডি অনুযায়ী স্টক কাউন্ট


প্রোডাক্ট নাম অনুযায়ী গ্রুপ করে স্টক কাউন্ট

MongoDB-এ একই প্রোডাক্ট নামের একাধিক এন্ট্রি থাকলে সেগুলো গ্রুপ করে মোট কোয়ান্টিটি, অ্যামাউন্ট এবং ইউনিক প্রোডাক্ট আইডি সংখ্যা বের করতে নেস্টেড $group ব্যবহার করা হয়।

নমুনা ডেটা তৈরি

> db.demo466.insertOne({ "ProductPrice": 150, "ProductQuantity": 1, "ProductName": "Product-1", "ActualAmount": 110, "ProductProfit": 40, "ProductId": 1 })
> db.demo466.insertOne({ "ProductPrice": 150, "ProductQuantity": 1, "ProductName": "Product-1", "ActualAmount": 110, "ProductProfit": 40, "ProductId": 2 })
> db.demo466.insertOne({ "ProductPrice": 170, "ProductQuantity": 2, "ProductName": "Product-2", "ActualAmount": 130, "ProductProfit": 50, "ProductId": 3 })

সমস্ত ডকুমেন্ট দেখানো

> db.demo466.find()

আউটপুট:

{ "_id": ObjectId("..."), "ProductPrice": 150, "ProductQuantity": 1, "ProductName": "Product-1", "ActualAmount": 110, "ProductProfit": 40, "ProductId": 1 }
{ "_id": ObjectId("..."), "ProductPrice": 150, "ProductQuantity": 1, "ProductName": "Product-1", "ActualAmount": 110, "ProductProfit": 40, "ProductId": 2 }
{ "_id": ObjectId("..."), "ProductPrice": 170, "ProductQuantity": 2, "ProductName": "Product-2", "ActualAmount": 130, "ProductProfit": 50, "ProductId": 3 }

নেস্টেড গ্রুপ কোয়েরি

> db.demo466.aggregate([
    { $group: {
        _id: { ProductName: "$ProductName" },
        ActualAmount: { $sum: "$ActualAmount" },
        ProductQuantity: { $sum: "$ProductQuantity" },
        ProductId: { $addToSet: "$ProductId" }
    }},
    { $project: {
        ProductQuantity: true,
        ActualAmount: true,
        NumberOfProductInStock: { $size: "$ProductId" }
    }}
])

ফলাফল:

{ "_id": { "ProductName": "Product-2" }, "ActualAmount": 130, "ProductQuantity": 2, "NumberOfProductInStock": 1 }
{ "_id": { "ProductName": "Product-1" }, "ActualAmount": 220, "ProductQuantity": 2, "NumberOfProductInStock": 2 }

ব্যাখ্যা

  • প্রথম $group: ProductName অনুযায়ী গ্রুপ করে:
    • $sum: "$ActualAmount": মোট অ্যাকচুয়াল অ্যামাউন্ট
    • $sum: "$ProductQuantity": মোট কোয়ান্টিটি
    • $addToSet: "$ProductId": ইউনিক প্রোডাক্ট আইডি সংগ্রহ (ডুপ্লিকেট বাদ)
  • $project: আউটপুট ফরম্যাট করে:
    • $size: "$ProductId": ইউনিক প্রোডাক্ট আইডির সংখ্যা (স্টকে কত ধরনের প্রোডাক্ট আছে)

Product-1 দুবার আছে (ProductId 1 এবং 2), তাই NumberOfProductInStock = 2।

  1. MongoDB-এ অ্যারে আইটেম গ্রুপ করে একই প্রাইসের প্রোডাক্ট কাউন্ট করা

  2. MongoDB-এ দুটি তারিখের মাঝপথে ও নির্দিষ্ট ফিল্ড মান দিয়ে ডেটা গ্রুপ করে সম ও কাউন্ট বের করা

  3. MongoDB-তে ন্যাচারেল অর্ডার দিয়ে সর্ট করা এবং আইটেমগুলো রিভার্স করা

  4. MongoDB-তে $group-এ সর্ট করে প্রথম দুটি ফিল্ড বের করা ($first + $$ROOT)