اگر یادتان باشد در فصل های قبلی در مورد cursor ها به صورت خلاصه صحبت کرده بودیم. متد ()find برخلاف findOne به ما یک cursor می داد. چرا این موضوع برای ما اهمیت دارد و چرا اصلا باید چنین اتفاقی بیفتد؟ اگر در یک پایگاه داده ی واقعی از ()find استفاده کنید (بدون آرگومان) هزاران یا حتی میلیون ها سند را دریافت خواهید کرد. حتی اگر شرطی را برای find قرار بدهید در اکثر اوقات این شرط برای صد ها سند برقرار است بنابراین با همان یک دستور به صد ها یا شاید هزاران سند درخواست بزنید. چنین فرآیندی بسیار غیر استاندارد است. چرا؟ به دلیل اینکه در چنین سناریویی: تمام داده ها توسط موتور پایگاه داده پیدا شده و دریافت می شوند، تمام داده ها از پایگاه داده به مموری سرور شما ارسال می شوند، تمام داده ها در مموری برنامه ی شما بارگذاری می شوند. به همین دلیل find به جای اینکه خود داده ها را به شما بدهد، یک cursor یا pointer (به معنی «نشانگر») به شما می دهد که جایگاه داده ها را در خود دارد اما خود داده ها را ندارد. مثلا اگر دستور find را روی 1000 سند صدا بزنیم، 20 سند اول (1 تا 20) به همراه یک cursor به ما داده می شود که حاوی جایگاه 10 سند بعدی (21 تا 40) نیز می باشد. به هر کدام از این دسته داده ها یک batch می گوییم. البته این حالت برای shell است که در آن کار می کنیم. یعنی driver های MongoDB به ما 20 داده ی اول را نمی دهند بلکه داده ها را تک به تک برمی گردانند و کنترل آن دست خودمان است.
پنل نویسندگان
