نحوه پاک کردن خودکار اسناد منقضی شده با MongoDB (فهرست TTL)

اخیراً لازم بود برخی از اسنادی را که پس از مدتی در MongoDB ذخیره کردم ، حذف کنم. من می توانم به چند نمونه از این دلیل که چرا می خواهیم داده ها را بعد از مدتی حذف کنیم ، فکر می کنم: > کاربران غیرفعال

  • و غیره

    ما می توانیم این کار را با اجرای cronjob که داده ها را حذف می کند انجام دهیم ، هر زمان داده جدیدی را وارد کنیم داده ها یا راه حل های دیگر.

    خوشبختانه برای من ، همسرم به من گفت که MongoDB از قبل آن سازوکار را دارد. p class = “paragraf”> شاخص های TTL (Time-To-Live) نمایه های تک فیلدی خاصی هستند که MongoDB می تواند برای حذف خودکار اسناد از مجموعه پس از مدت زمان مشخصی از آنها استفاده کند. “> یک موضوع پس زمینه در MongoDB مقادیر موجود در فهرست را می خواند و اسناد منقضی شده را از مجموعه خارج می کند (معمولاً هر دقیقه).

    به عنوان مثال ، برای ایجاد یک شاخص TTL در lastModifiedDate مجموعه رویداد ، از عملیات زیر در پوسته mongo استفاده کنید:

    db.eventlog.createIndex ({” lastModifiedDate “: 1 } ، { expireAfterSeconds : 3600 })
    • قسمت نمایه شده باید از نوع تاریخ BSON یا آرایه ای از تاریخ های BSON باشد
    • اگر قسمت نمایه شده در سند تاریخ یا آرایه ای نیست که دارای یک مقدار تاریخ باشد ، سند منقضی نمی شود.
    • اگر سندی حاوی قسمت فهرست شده نباشد ، سند منقضی نمی شود.

    حذف مشروط

    از MongoDB 3.2 ، یک مجموعه را می توان با استفاده از یک عبارت فیلتر مشخص ،

    partialFilterExpression ، نمایه سازی کرد. از شاخص TTL می توان با نمایه های جزئی نیز استفاده کرد.

    به عنوان مثال:

    اسنادی را که 1 ساعت قبل ایجاد شده اند حذف کنید اگر حالت برابر با TMP باشد < div class = "code-container" readability = "10"> db.eventlog.createIndex ( { ایجاد شده در : 1 } ، { expireAfterSeconds : 3600 ، partialFilterExpression : { ایالت : ‘TMP’ }}

  • حذف اسنادی که 1 روز پیش ایجاد کرده اند اگر تعداد کمتر از 5 باشد

    db.eventlog. ایجادIndex ( { ایجاد شده در : 1 } ، { expireAfterSeconds : 86400 ، partialFilterExpression : { تعداد : { $ lt : 5 }}}

    اطلاعات اضافی در مورد نمایه های جزئی

    مثال واقعی

    اخیراً من توسعه BundleMon را به پایان رساندم ، این یک ابزار رایگان است که به شما کمک می کند اندازه بسته نرم افزاری برنامه های خود را کنترل کنید.

    یکی از اجزای موجود در BundleMon سرویسی است که به منظور مقایسه اندازه بسته نرم افزاری ، گزارش های تاریخی را ذخیره می کند. بین شاخه ها. بنابراین هنگام باز کردن روابط عمومی ، BundleMon با گزارش اندازه بسته فعلی ، یک رکورد ذخیره می کند.

    نیازی به ذخیره گزارش برای بیش از 30 روز نیست ، بنابراین من فقط یک شاخص TTL اضافه کردم:

    db.reports.createIndex ( { تاریخ ایجاد : 1 } ، { expireAfterSeconds : 2592000 ، partialFilterExpression : { prNumber : { $ وجود دارد : درست است }}}

    همچنین در https://dev.to/lironer/delete- Expired-documents-automatic-with-mongodb-ttl-index-l44