رفتن به نوشته‌ها

دسته: MongoDB (مونگو دی‌بی)

آشنایی با stage بعدی؛ GeoNear$

در این قسمت می خواهیم در رابطه با نکته ای باقی مانده و سپس stage بعدی در pipeline صحبت کنیم. اگر یادتان باشد در چند جلسه ی قبل یک کوئری پیچیده به شکل زیر را نوشته بودیم. این کوئری علاوه بر دریافت طول و عرض جغرافیایی و تبدیل کردن تاریخ به نوع داده ی ISODate، نام افراد را گرفته و حرف اول آن را با حروف بزرگ انگلیسی بازنویسی می کرد. ما یک جلسه ی کامل را به این کوئری اختصاص دادیم و در مورد آن صحبت کردیم بنابراین مطالب جلسات قبل را تکرار نمی کنم.  هدف من از ذکر این کوئری این است که در این جلسه می خواهیم با داده های جغرافیایی کار کنیم ولی مشکلی وجود دارد. داده های اصلی خودمان قابل استفاده نیستند چرا که طول و عرض جغرافیایی در آن ها به صورت رشته ای ذخیره شده اند نه به صورت عددی! از طرفی نمی توانیم اپراتور این stage را به کوئری بالا اضافه کنیم. چرا؟ اگر یادتان باشد در فصل کار با داده های جغرافیایی توضیح دادم که اپراتور هایی مثل geoWithing و غیره حتما باید دارای ایندکس باشند. از طرف دیگر برای استفاده از این ایندکس حتما باید اپراتور خود را در ابتدای pipeline (به عنوان stage اول) بیاوریم اما در stage اول داده های جغرافیایی ما هنوز به شکل رشته ای هستند. به نظر شما راه حل چیست؟ ساده ترین راه حلی که به ذهن همه می رسد این است که داده های تغییر کرده در انتهای pipeline را در یک محل ذخیره کنیم و سپس دوباره آن داده ها را در یک pipeline دیگر به اپراتور های جغرافیایی بدهیم. برای این کار می توانیم از یک اپراتور دیگر به نام out$ استفاده کرده تا داده های خود را درون یک کالکشن جدید ذخیره کنیم: من در انتهای این کوئری یک stage دیگر به نام out$ را تعریف کرده ام و سپس یک نام دلخواه (به عنوان نام کالکشن جدید) را به آن می دهم. با اجرای کوئری بالا کالکشن جدیدی به نام transformedPersons ایجاد خواهد شد. برای تست این موضوع می توانیم پس از اجرای کوئری بالا کد زیر را نیز اجرا کنیم: