Для полей 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> );