کوئری زدن و پیدا کردن نتایج بر اساس تاریخ در MongoDB



visibility  
mode_comment   ۰

کوئری زدن و پیدا کردن نتایج بر اساس تاریخ در MongoDB

فرض کنید که کاربران زیادی در پایگاه داده دارید و میخواید اون کاربرانی که در یک تاریخ مشخص یا در یک بازه مشخص ثبت‌نام کردند یا کار مشخصی رو انجام دادن، پیدا کنید و کار خاصی رو روی اونا انجام بدین.

در این مطلب بهتون یاد دادیم که چطور میتونین MongoDB رو بر روی سیستم خودتون نصب کنید. در این مطلب هم مدیریت MongoDB با استفاده از RoboMongo رو بهتون آموزش دادیم.

همونطور که میدونین MongoDB تاریخ رو بصورت ISODate ذخیره میکنه که یک فرمت رشته‌ای و استاندارد از تاریخ هست. مثلا اگر بخوایم تاریخ الان یا هر تاریخ دیگه‌ای رو به ISODate تبدیل کنیم، میتونیم در Javascript از متد toISOString استفاده کنیم. مثال زیر رو ببینید:

همونطور که میبینید متد toISOString تاریخ مورد‌نظر رو بصورت یک رشته تاریخ در میاره که اطلاعات مربوط به تاریخ رو درون خودش نگه داشته است و باز میتونین اون رو به هر نوع تاریخی که خواستید تبدیل کنید. حالا فرض کنید که 3 کاربر در پایگاه داده MongoDB داریم. بصورت زیر:

میبینید که هر کدام از کاربرها یک ویژگی بنام signup_at دارن که تاریخی که در اون ثبت نام کردن رو مشخص میکنه.

اول باید تاریخ دقیق ابتدا و انتهای امروز رو بصورت ISOString بدست بیاریم. برای اینکار در یک Console مرورگر یا ... که میتونیم کد Javascript بنویسیم و خروجی بگیریم، کدهای زیر رو اجرا میکنیم:

میبینید که ابتدا و انتهای امروز رو بصورت ISODate بدست آوردیم.

متخصص جاوا اسکریپت
با جاوا اسکریپت جادوگری کنید! آیا می دونید با زبان جاوااسکریپت می تونید، برای فرانت اند و بک اند وبسایت ها برنامه نویسی کنید؟ همینطور اپلیکیشن دسکتاپ و موبایل بسازید؟ اگر دوست داری اینکارها رو انجام بدی و React, ElectronJS, ReactNative, NodeJS,MongoDB و ... رو تو یه دوره یاد بگیری، متخصص جاوااسکریپت سون لرن رو حتما ببین : متخصص جاوا اسکریپت arrow_back

حالا مثلا برای اینکه بفهمیم کدام کاربرها امروز ثبت نام کرده میتونین بصورت زیر در RoboMongo یا Shell خود MongoDB کوئری خودتون رو بنویسید:

همونطور که میبینید ابتدا با استفاده از متد getCollection به MongoDB گفتیم که میخوایم بر روی Collection یا Table بنام users کوئری بزنیم. با استفاده از متد find هم میتونیم یک یا چند نتیجه که با کوئری ما Match هستند رو بدست بیاریم.

در بالا ابتدا مشخص کردیم که میخوایم بر روی فیلد signup_at محدودیت قرار بدیم. درون اون از $gte و $lte استفاده کردیم. MongoDB عملگرهای بسیار زیادی داره که میتونین همه اونا رو در اینجا ببینید.

هر کدوم از این عملگرها کار خاصی رو انجام میدن. مثلا عملگرهای زیر رو ببینید:

  • $gte : این عملگر خلاصه greater than or equal یا بزرگتر و مساوی هست
  • $lte : این عملگر خلاصه less than or equal یا کوچکتر و مساوی هست
  • $gt : این عملگر خلاصه greater than یا بزرگتر هست
  • $lt : این عملگر خلاصه less than یا کوچکتر هست
  • و ...

برای مقایسه کوچکتر یا بزرگتر بودن دو مقدار یا تاریخ یا .... از این عملگرها استفاده میکنیم. پس همونطور که در Query بالا دیدید، شروع امروز رو در مقابل $gte و پایان امروز رو در مقابل $lte قرار دادیم.

با اینکار مشخص کردیم همه کاربرهایی که زمان ثبت‌نام اونا بزرگتر مساوی شروع تاریخ امروز و کوچکتر مساوی پایان تاریخ امروز هست رو پیدا کن. MongoDB هم اینکار رو انجام میده و نتایج رو در اختیارمون قرار میده. مثلا اگر کوئری بالا رو اجرا کنیم، نتیجه بصورت زیر میشه:

میبینید که کاربر 3 در این بازه قرار میگیره و متوجه میشیم که این کاربر امروز ثبت نام کرده است. کوئری بالا رو میتونیم بصورت زیر هم بنویسیم:

نتیجه همانند قبل خواهد بود. در بالا از عملگر $and که یکی دیگه از عملگرهای MongoDB هست استفاده کردیم. درون $and میتونین شرطهای مختلفی قرار بدین و این عملگر فقط زمانی موفق‌آمیز میشه که همه شرطهای درون اون true بشن.

نتیجه گیری

همونطور که دیدید توانستیم با استفاده از عملگرهای $lte و $gte مواردی که بین دو تاریخ مشخص قرار دارن رو در MongoDB انتخاب کنیم. با اینکار میتونین برای آمار گرفتن و ... استفاده کنید.

اگر شما هم روشی برای انجام دادن عملیات بالا دارید، خوشحال میشم که با من و دیگر کاربران در میان بذارید.

comment دیدگاه کاربران

نیاز به لاگین

برای ارسال دیدگاه و یا پرسیدن سوال خود در این قسمت، باید در سایت لاگین شوید.