Как я могу включать и выключать индекс TTL с помощью мангуста?

Я хочу создать учетную запись пользователя в своем приложении и удалить этого пользователя через определенный промежуток времени, если этот пользователь не подтвердил свою учетную запись, и отключить TTL, если пользователь подтвердил свою учетную запись.

Вот моя схема:

const mongoose = require('mongoose')
const Schema = mongoose.Schema

const UserSchema = new Schema({
  name: {
    type: String,
    required: true
  },
  email: {
    type: String,
    required: true
  },
  password: {
    type: String,
    required: true
  }
  ,
  isConfirmed: {
    type: Boolean
  },
  code: {
    type: String
  },
  createdAt: {
    type: Date,
    expires: 3600,
    default: Date.now
  }
})

module.exports = User = mongoose.model('users', UserSchema)
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
191
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку вы уже добавили TTL index в поле createdAt, вы можете легко отключить его, удалив поле createdAt после успешного подтверждения учетной записи.

Если документ имеет значение createdAt и старше указанного времени, то он будет удален. Но если вы удалите это поле при подтверждении учетной записи, оно не будет удалено. Таким образом, вам нужно удалить поле createdAt при подтверждении учетной записи.

Если вы хотите сохранить поле createdAt, вы можете добавить TTL index в какое-нибудь временное поле, например expireAfter, и удалить его при подтверждении учетной записи.

  expireAfter: {
    type: Date,
    expires: 3600,
    default: Date.now
  }

После подтверждения аккаунта.

User.findOneAndUpdate({_id : user_id},{$unset : {expireAfter:1}})

Из официальных документов:

MongoDB will automatically delete documents from the collection when the document’s createdAt value is older than the number of seconds specified in expireAfterSeconds (in your case expires ).

Для получения дополнительной информации прочитайте Документы индекса MongoDB TTL

Другие вопросы по теме