LexxXell
@LexxXell
Программист и немного IT-журналист

Как правильно сделать поля createdAt, changedAt и lastActivityAt для модели в mongoose?

В модели должны быть поля с датой её создания, датой изменения, и датой последней активности (дата последнего обращения к экземпляру). Как это реализовать в SQL я представляю. Как можно с МонгоДБ это сделать?

Модель
const someSchema = mongoose.Schema({
    createdAt: { type: Date, default: Date.now },
    changedAt: { type: Date, default: Date.now },
    lastActivityAt: { type: Date, default: Date.now },
})


Я воздержусь высказывать свои соображения по поводу реализации, т.к. js не основной мой язык, и мне хотелось бы увидеть мнение специалистов.
  • Вопрос задан
  • 862 просмотра
Пригласить эксперта
Ответы на вопрос 1
LexxXell
@LexxXell Автор вопроса
Программист и немного IT-журналист
Для полей createdAt и changedAt решение нашел.
Mongoose 4+ поддерживает автоматическое создание вышеуказанных полей. Схема изменится так:
const someSchema = mongoose.Schema(
    {
        lastActivityAt: { type: Date, default: Date.now },
    },
    { timestamps: true }
)


Касательно поля lastActivityAt, то я не нашел элегантного способа, и его придется обновлять "вручную" в коде, при обращении. Можно было бы использовать методы pre и post, но в конкретном случае это не подходит, т.к. изменять поле lastActivityAt нужно не при каждом обращении, я только для конкретных функций.
Моё решение, получать экземпляр так:
const instance = await someModel.findOne( <FilterQuery> )
    ? await someModel.findOneAndUpdate(
        <FilterQuery>,
        { lastActivityAt: Date.now() }
    )
    : await someModel.create( <ObjectQuery> );
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы