عملگرهای مورد استفاده تو توابع aggregate، داکیومنت ها رو پردازش کرده و نتیجه محاسبه شده رو بر میگردونن.
کالکشن point-types
{ amount: number; title: string; type: string }
کالکشن point
{ amount: number; basedOn: string; contractor: string; projectId: string; type: string }
این عملگر برای 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 باشه.