Mohammad Jawad Barati
Mohammad Jawad Barati
خواندن ۲ دقیقه·۴ سال پیش

تابع aggregate و operator هاش تو مانگو دی بی

عملگرهای مورد استفاده تو توابع aggregate، داکیومنت ها رو پردازش کرده و نتیجه محاسبه شده رو بر میگردونن.

مقدمه

کالکشن point-types

{ amount: number; title: string; type: string }

کالکشن point

{ amount: number; basedOn: string; contractor: string; projectId: string; type: string }
  • توی کالکشن بالا contractor کلید خارجی به کالکشن contractors هست.
  • توی کالکشن بالا projectId کلید خارجی به کالکشن demand-lead هست.
  • توی کالکشن بالا type کلید خارجی به کالکشن point-types هست.

عملگر lookup

این عملگر برای left outer join استفاده میشه. برای equality match هست. فرض کن میخوای شرطی بزاری که نیاز داره چند تا کالکشن رو با هم join بزنی. مثلا تو میخوای روی کالکشن point کوئری بزنی و بگی point هایی رو بهم بده که کلید type شون به point-types ای اشاره داره که type اون برابر با مقدار X هست.

جوین کردن دیتا از یه input collection (کالکشنی که روش کوئری رو اجرا میکنی) و یه lookup collection (کالکشنی که دیتا توشه).

ما همچین کوئری ای میزنیم:

{ from: 'point-types', localField: 'type', foreignField: '_id', as: 'pointType' }

حالا توی اون فیلد جدید (pointType) تو type رو داری (مطالعه بیشتر). حالا میخوای اون شرط رو بزنی:

{ $match: { contractor: ObjectId('id'), }, }, { $lookup: { from: 'point-types', localField: 'type', foreignField: '_id', as: 'pointType', }, }, { $unwind: { path: '$pointType', }, }, { $match: { $expr: { $eq: ['$pointType.type', 'bad-status-set-out'], }, }, },

این کوئری فقط اونایی رو بر میگرودونه که type شون برابر با رشته X باشه.


رفرنس

aggregateoperatorsmongodb
برنانه نویس، مدرس، محقق. عاشق انیمه هستم و دنبال چالش ها جدید.
شاید از این پست‌ها خوشتان بیاید