$lookup ($lookup)
اینجا «جوین با $lookup» را خیلی ساده می بینیم. این مرحله یک «جوین بیرونی چپ» است. یعنی اسناد کالکشن اصلی، با اسناد کالکشن دیگر وصل می شوند. سپس نتیجه تطبیق، داخل یک فیلد آرایه برمی گردد.
ساختار $lookup و فیلدهای لازم
$lookup چهار فیلد ضروری دارد. هر کدام کار مشخصی دارند و باید تنظیم شوند.
from: نام کالکشن مقصد در همان دیتابیس.localField: فیلد در کالکشن اصلی برای تطبیق.foreignField: فیلد متناظر در کالکشن مقصد.as: نام فیلد خروجی برای نتایج تطبیق.
db.comments.aggregate([
{
$lookup: {
from: "movies",
localField: "movie_id",
foreignField: "_id",
as: "movie_details"
}
},
{
$limit: 1
}
])
گام های عملی جوین با $lookup
- کالکشن مقصد را در
fromمشخص کن. - کلیدهای تطبیق را در
localFieldوforeignFieldبده. - نام فیلد خروجی را در
asتعیین کن.
نکته: خروجی as یک آرایه است. بنابراین ممکن است چند تطبیق برگردد.
نمونه کاربرد و نتیجه
در نمونه بالا، هر comment همراه با جزئیات movie برمی گردد. چون جوین بیرونی چپ است، کامنت های بدون فیلم نیز حفظ می شوند.
برای شمارش بعدی، بخش $count را ببین. همچنین برای خروجی گرفتن از نتایج، بخش $out مناسب است.
جمع بندی سریع
- $lookup جوین بیرونی چپ بین کالکشن ها می سازد.
- چهار فیلد ضروری دارد: from، localField، foreignField، as.
- نتیجه جوین در فیلد آرایه ای
asذخیره می شود. - مثال بالا یک سند را با
$limitنشان می دهد.