مشاركة عبر


aggregate

aggregate يتم استخدام الأمر لمعالجة سجلات البيانات وإرجاع النتائج المحسوبة. يقوم بإجراء عمليات على البيانات، مثل التصفية والت تجميعها وفرزها، ويمكنه تحويل البيانات بطرق مختلفة. aggregate الأمر متعدد الاستخدامات للغاية ويستخدم عادة لتحليل البيانات وإعداد التقارير.

إعراب

db.collection.aggregate(pipeline, options)
  • البنية الأساسية لبرنامج ربط العمليات التجارية: صفيف من مراحل التجميع التي تعالج البيانات وتحولها.
  • خيارات: اختياري. تحديد المزيد من الخيارات للتجميع، مثل explainو allowDiskUseو.cursor

أمثلة

مثال 1: حساب إجمالي المبيعات حسب الفئة

يوضح هذا المثال كيفية حساب إجمالي المبيعات لكل فئة في stores المجموعة.

db.stores.aggregate([
  {
    $unwind: "$sales.salesByCategory"
  },
  {
    $group: {
      _id: "$sales.salesByCategory.categoryName",
      totalSales: { $sum: "$sales.salesByCategory.totalSales" }
    }
  }
])

عينة الإخراج

[mongos] StoreData> db.stores.aggregate([
...   {
...     $unwind: "$sales.salesByCategory"
...   },
...   {
...     $group: {
...       _id: "$sales.salesByCategory.categoryName",
...       totalSales: { $sum: "$sales.salesByCategory.totalSales" }
...     }
...   }
... ])

[
  { _id: 'Christmas Trees', totalSales: 3147281 },
  { _id: 'Nuts', totalSales: 3002332 },
  { _id: 'Camping Tables', totalSales: 4431667 }
]
 

مثال 2: البحث عن متاجر ذات موظفين بدوام كامل أكبر من 10

يوضح هذا المثال كيفية تصفية المتاجر حيث يكون عدد الموظفين بدوام كامل أكبر من 10.

db.stores.aggregate([
  {
    $match: {
      "staff.totalStaff.fullTime": { $gt: 10 }
    }
  }
])

عينة الإخراج

[mongos] StoreData> db.stores.aggregate([
...   {
...     $match: {
...       "staff.totalStaff.fullTime": { $gt: 10 }
...     }
...   }
... ])

[
  {
    _id: '7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5',
    name: "Lenore's DJ Equipment Store",
    location: { lat: -9.9399, lon: -0.334 },
    staff: { totalStaff: { fullTime: 18, partTime: 7 } },
    sales: {
      totalSales: 35911,
      salesByCategory: [ { categoryName: 'DJ Headphones', totalSales: 35911 } ]
    },
    promotionEvents: [
      {
        discounts: [
          { categoryName: 'DJ Turntables', discountPercentage: 18 },
          { categoryName: 'DJ Mixers', discountPercentage: 15 }
        ]
      }
    ],
    tag: [ '#SeasonalSale', '#FreeShipping', '#MembershipDeals' ]
  }
]

مثال 3: سرد جميع أحداث الترويج بخصومات أكبر من 15%

يسرد هذا المثال جميع أحداث الترقية حيث يكون أي خصم أكبر من 15%.

db.stores.aggregate([
  {
    $unwind: "$promotionEvents"
  },
  {
    $unwind: "$promotionEvents.discounts"
  },
  {
    $match: {
      "promotionEvents.discounts.discountPercentage": { $gt: 15 }
    }
  },
  {
    $group: {
      _id: "$promotionEvents.eventName",
      discounts: { $push: "$promotionEvents.discounts" }
    }
  }
])

عينة الإخراج

[mongos] StoreData> db.stores.aggregate([
...   {
...     $unwind: "$promotionEvents"
...   },
...   {
...     $unwind: "$promotionEvents.discounts"
...   },
...   {
...     $match: {
...       "promotionEvents.discounts.discountPercentage": { $gt: 20 }
...     }
...   },
...   {
...     $group: {
...       _id: "$promotionEvents.eventName",
...       discounts: { $push: "$promotionEvents.discounts" }
...     }
...   }
... ])
[
  {
    [
      { categoryName: 'Basketball Gear', discountPercentage: 23 },
      { categoryName: 'Wool Carpets', discountPercentage: 22 },
      {
        categoryName: 'Portable Bluetooth Speakers',
        discountPercentage: 24
      }
    ]
  }
]