Mongoose の timestamp options で createdAt だけ使う方法を調べたけど、自分で pre hook に実装するしかなかったというお話です。
まず、Mongoose version 4.8.5 時点では、ソースコードを読んだ限りでは options.timestamps には createdAt, updatedAt のどちらかだけ使うという option はありませんでした。
以下、Mongoose のソースコードを一部抜粋しました。
/**
* Setup updatedAt and createdAt timestamps to documents if enabled
*
* @param {Boolean|Object} timestamps timestamps options
* @api private
*/
Schema.prototype.setupTimestamp = function(timestamps) {
if (timestamps) {
var createdAt = timestamps.createdAt || 'createdAt';
var updatedAt = timestamps.updatedAt || 'updatedAt';
// ...
}
};
というわけで .pre(“save”) .pre(“findOneAndUpdate”) .pre(“update”) とかに options.timestamps 的な hook を追加するサンプルコードをご紹介します。
var yourSchema = new Schema({
createdAt: {
type: Date
}
});
yourSchema.pre("save", function(next) {
var now = new Date;
if (this.isNew) {
this.createdAt = now;
}
return next();
});
yourSchema.pre("findOneAndUpdate", function(next) {
var now = new Date;
this.findOneAndUpdate({}, {
$setOnInsert: {
createdAt: now
}
});
return next();
});
yourSchema.pre("update", function(next) {
var now = new Date;
this.update({}, {
$setOnInsert: {
createdAt: now
}
});
return next();
});
最後に、小ネタですが timestamp options を削除するという issue があるので確認してみると version 4.11 のマイルストーンで削除されるかもしれません。