همانطور که در انتهای جلسه ی قبل توضیح دادم Cursor ها حاوی اطلاعاتی از داده ها هستند اما خود داده ها را ندارند. ما می خواهیم در این جلسه به صورت عملی و جزئی تری با آن ها کار کنیم. قبلا هم گفته بودم که Driver ها به جای برگرداندن 20 سند از یک کالکشن، شیء cursor را برمی گردانند که باید با آن کار خاصی را انجام بدهیم. مثلا: use movieData و db.movies.find().next() تابع next به ما اجازه می داد که به داده ی بعدی در cursor برویم. با اجرای دستور بالا، برای من سریال arrow با id برابر 4 برگردانده می شود. حالا اگر دوباره دستور next را اجرا کنم، باز هم همان سریال و همان id به من برگردانده می شود. به نظر شما چرا این اتفاق می افتد؟ به دلیل اینکه کوئری ما در shell از ابتدا و بدون توجه به موارد قبلی اجرا می شود و مانند driver ها نیست. برای اینکه عملیات driver ها را در Shell شبیه سازی کنیم باید کوئری را در یک ثابت ذخیره نماییم: const dataCursor = db.movies.find() با اجرای این دستور درون shell چیزی نمی بینید اما cursor شما درون dataCursor ذخیره شده است و حالا می توانیم next را روی آن صدا بزنیم:dataCursor.next() در بار اولی که این کد را اجرا می کنم، سریال arrow با آیدی 4 را می گیرم اما در دفعه ی بعدی True Detective را با آیدی 5 دریافت می کنم. اگر همینطور به صدا زدن next ادامه بدهیم، آیدی های بعدی را دریافت خواهیم کرد. حالا اگر واقعا بخواهیم 20 سند اول را دریافت کنیم، باید چه کار کنیم؟ این مسئله بستگی به driver شما دارد اما به طور خلاصه باید از یک حلقه استفاده کنید که روی cursor گردش کند. ما فعلا در Shell هستیم که بر پایه ی جاوا اسکریپت است بنابراین می توانیم از حلقه ی forEach استفاده نماییم:
پنل نویسندگان
