node.js - MongoDB დოკუმენტების ავტომატური წაშლა 30 დღის შემდეგ


მოდელი კალენდრის აპლიკაციაზე მუშაობა ვაკეთებ React & Express.js & Mongo DB-ით. კალენდარი აქვს თვის ხედი, აჩვენებს ყოველკვირეულ მოვლენებს, და მსურს ეს მოვლენები ავტომატურად წაიშალოს 30 დღის შემდეგ.

ჩემი schema.ts:

import { Calendar } from "../types";

const calendarSchema = new mongoose.Schema<Calendar>(
  {
    startDate: {
      type: String,
      required: true,
    },
    endDate: {
      type: String,
      required: true,
    },
    rRule: {
      type: String,
    },
    title: {
      type: String,
      required: true,
    },
    notes: {
      type: String,
      // required: true,
    },
    type: {
      type: String,
      required: true,
    },
    expireAt: {
      type: Number,
    },
  },
  {
    timestamps: true,
  }
);

calendarSchema.index({ expireAt: 1 }, { expireAfterSeconds: 70 });

export default mongoose.model<Calendar>("Calendar", calendarSchema);

და მე ვქმნი "expireAt" სფეროს ჩემს ფინტ ენდზე ასე:

const payload = await createAppointment({
      ...appointment,
      expireAt: new Date().getTime() + 80,
    });

ახლა ეს წაშლის დოკუმენტებს 40 - 50 წამში, ჩემი კითხვა არის როგორ შემიძლია გავხადო ეს 30 ან 31 დღემდე? წინასწარ მადლობა.

პასუხი #1

შეცვალეთ expireAt Date-ში number-ის ნაცვლად

და ინდექსის შექმნისას მიუთითეთ 0 expireAfterSeconds-ს

calendarSchema.index({ expireAt: 1 }, { expireAfterSeconds: 0 });

ახლა შეგიძლიათ განსაზღვროთ ზუსტი თარიღი, როდის დაყოვნდება თითოეული კალენდარი, წლიური პერიოდიდან წამებამდე

დამატებითი ინფორმაციისთვის, გადაამოწმეთ MongoDB-ის დოკუმენტაცია

პასუხი #2

პრობლემა არის ის, რომ თქვენ განსაზღვრეთ ვადა 70 წამის შემდეგ:

calendarSchema.index({ expireAt: 1 }, { expireAfterSeconds: 70 });

70-ის ნაცვლად expireAfterSeconds-ში უბრალოდ ჩაწერეთ სასურველი მნიშვნელობა, მაგალითად 7 დღისათვის:

60 * 60 * 24 * 7 = 604800