آموزش aggregation در MongoEngine

3 سال پیش
آموزش aggregation در MongoEngine

آموزش aggregation در MongoEngine

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش aggregation در MongoEngine خواهیم پرداخت.

پیشنهاد ویژه : پکیج آموزش پروژه محور پایتون

اصطلاح “aggregation” برای عملیاتی استفاده می شود که داده ها را پردازش می کند و نتیجه محاسبه شده را برمی گرداند. یافتن جمع ، شمارش و میانگین در یک یا چند زمینه از اسناد در یک مجموعه را می توان توابع تجمع نامید.

MongoEngine تابع ()aggregation را فراهم می کند که چارچوب تجمع PyMongo را در بر می گیرد. عملیات تجمیع از مجموعه ای به عنوان ورودی استفاده می کند و در نتیجه یک یا چند سند را برمی گرداند.

MongoDB از مفهوم خطوط لوله پردازش داده استفاده می کند. یک خط لوله می تواند چندین مرحله داشته باشد. مرحله اساسی فراهم می کند که فیلتر را فراهم می کند و مانند کوئری ها کار می کند. برخی دیگر ابزارهایی را برای گروه بندی و / یا مرتب سازی بر اساس یک یا چند زمینه ، کارهای الحاق رشته ای ، ابزار جمع آوری آرایه و غیره ارائه می دهند

مراحل زیر در ایجاد خط لوله MongoDB تعریف شده است –

  •  project$ با افزودن فیلدهای جدید یا حذف فیلدهای موجود ، هر سند را در جریان تغییر شکل می دهد.
  •  match$ جریان سند را فیلتر می کند تا فقط اسناد منطبق به مرحله بعدی منتقل شوند. $ match از پرس و جوهای استاندارد MongoDB استفاده می کند.
  •  redact$ با محدود کردن محتوای هر سند بر اساس اطلاعات ذخیره شده در خود اسناد ، هر سند را تغییر شکل می دهد.
  • limit$ اسنادی را که باید بدون تغییر به خط لوله منتقل شوند محدود می کند
  •  skip$ از اولین اسناد پرش می کند و اسناد باقیمانده را که اصلاح نشده به خط انتقال می دهد.
  •  group$ اسناد ورودی را توسط یک عبارت مشخص داده شده گروه بندی می کند و عبارات جمع کننده را برای هر گروه اعمال می کند. اسناد خروجی فقط شامل قسمت شناسایی و فیلدهای جمع شده است.
  •  sort$ جریان سند را با یک کلید مرتب سازی مشخص مرتب می کند.
  •  out$ اسناد حاصل از خط لوله تجمع را در یک مجموعه می نویسد.

 

عبارات جمع از مسیر زمینه برای دسترسی به فیلدها در اسناد ورودی استفاده می کنند. برای مشخص کردن مسیر درست ، از رشته ای استفاده کنید که پیشوندهای دارای علامت دلار $ $ $ نام زمینه را داشته باشد. بیان می تواند از یک یا چند عملگر بولی ($ و ، $ یا ، $ نه) و عملگرهای مقایسه ($ eq ، $ gt ، $ lt ، $ gte ، $ lte و $ ne) استفاده کند.

از عبارات حسابي زير نيز براي تجمع استفاده مي شود –

  •  add$ اعداد را برای برگشت جمع جمع می کند. به هر تعداد عبارات استدلال را می پذیرد
  •  subtract$ نتیجه کم کردن مقدار دوم از مقدار اول را برمی گرداند
  • multiply$ اعداد را برای بازگشت محصول ضرب می کند. هر تعداد عبارات استدلال را می پذیرد
  •  divide$ نتیجه تقسیم عدد اول به عدد دوم را برمی گرداند. دو عبارت استدلال را می پذیرد
  •  mod$ باقیمانده عدد اول تقسیم بر عدد دوم را برمی گرداند. دو عبارت استدلال را می پذیرد

از عبارت رشته ای زیر نیز می توان در تجمیع استفاده کرد –

  •  concat$ هر تعداد رشته را بهم پیوند می دهد
  •  substr$ یک رشته زیر رشته را برمی گرداند ، از یک موقعیت مشخص مشخص شده تا یک طول مشخص شروع می شود
  •  toLower$ یک رشته را به حروف کوچک تبدیل می کند. یک عبارت استدلال واحد را می پذیرد
  •  toUpper$ یک رشته را به بزرگ تبدیل می کند. یک عبارت استدلال واحد را می پذیرد
  •  strcasecmp$ مقایسه رشته را انجام می دهد و ۰ را برمی گرداند اگر دو رشته معادل باشد ، ۱ اگر اول بزرگتر از دوم باشد و -۱ اگر رشته اول کمتر از دوم باشد

برای نشان دادن چگونگی عملکرد تابع ()aggregate در MongoEngine ، اجازه دهید ابتدا یک کلاس Document به نام دستورات تعریف کنیم.

from mongoengine import *
con=connect('mydata')

class orders(Document):
   custID = StringField()
   amount= IntField()
   status = StringField()

 

سپس اسناد زیر را در مجموعه سفارشات اضافه می کنیم –

_id custID مقدار وضعیت
ObjectId(“5eba52d975fa1e26d4ec01d0”) A123 ۵۰۰ A
ObjectId(“5eba536775fa1e26d4ec01d1”) A123 ۲۵۰ A
ObjectId(“5eba53b575fa1e26d4ec01d2”) B212 ۲۰۰ D
ObjectId(“5eba540e75fa1e26d4ec01d3”) B212 ۴۰۰ A

از تابع ()aggregate فقط برای یافتن قسمت مبالغ مقدار برای هر custID فقط در صورت برابر بودن وضعیت با “A” استفاده می شود. بر این اساس ، خط لوله به شرح زیر ساخته شده است.

مرحله اول خط لوله از match$ برای فیلتر کردن اسناد با وضعیت = ‘A’ استفاده می کند. مرحله دوم با استفاده از شناسه $ $ گروه بندی اسناد در مورد CustID را انجام می دهد و مبلغی را انجام می دهد.

pipeline = [
{"$match" : {"status" : "A"}},
{"$group": {"_id": "$custID", "total": {"$sum": "$amount"}}}
]

 

این خط لوله اکنون به عنوان آرگومان برای جمع آوری تابع () استفاده می شود.

docs = orders.objects().aggregate(pipeline)

 

ما می توانیم با یک حلقه for بر روی مکان نما سند تکرار کنیم. کد کامل در زیر آورده شده است –

from mongoengine import *
con=connect('mydata')

class orders(Document):
   custID = StringField()
   amount= IntField()
   status = StringField()

pipeline = [
   {"$match" : {"status" : "A"}},
   {"$group": {"_id": "$custID", "total": {"$sum": "$amount"}}}
   ]
docs = orders.objects().aggregate(pipeline)
for doc in docs:
   print (x)

 

برای داده های داده شده ، خروجی زیر تولید می شود –

{'_id': 'B212'، 'total': 400}
{'_id': 'A123'، 'total': 750}

 

منبع.

 

لیست جلسات قبل آموزش MongoEngine

  1. آموزش MongoEngine
  2. آموزش MongoDB در MongoEngine
  3. آموزش قطب نما MongoDB در MongoEngine
  4. آموزش نگاشت کننده اسناد شی در MongoEngine
  5. آموزش نصب MongoEngine
  6. آموزش اتصال به پایگاه داده MongoDB در MongoEngine
  7. آموزش کلاس Document در MongoEngine
  8. آموزش طرح پویا در MongoEngine
  9. آموزش کلاس Field در MongoEngine
  10. آموزش افزودن / حذف سند در MongoEngine
  11. آموزش استعلام پایگاه داده در MongoEngine
  12. آموزش فیلترها در MongoEngine
  13. آموزش عملگرهای Query در MongoEngine
  14. آموزش روش های QuerySet در MongoEngine
  15. آموزش مرتب سازی در MongoEngine
  16. آموزش مجموعه کوئری های سفارشی در MongoEngine
  17. آموزش نمایه ها در MongoEngine
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه