データベースコレクションで、レコードが現在の日時で更新されるたびに、「lastChanged」フィールドを更新したいと思います。次のように、マングースのデフォルトの日付と同じ形式にします。
ISODate("2011-10-06T14: 01: 31.106Z")
知恵の言葉はありますか?
ISO文字列を使用したいだけの場合:
new Date().toISOString()
これを実現する1つの方法は、 Mongoose Middleware を使用して、フィールドの事前保存を更新することです。
_var mongoose = require('mongoose');
var Schema = mongoose.Schema;
//schema
var SomethingSchema = new Schema({
text: {type: String},
createdAt: {type: Date, default: Date.now},
updatedAt: {type: Date, default: Date.now}
});
//middle ware in serial
SomethingSchema.pre('save', function preSave(next){
var something = this;
something.updatedAt(Date.now());
next();
});
_
ただし、ミドルウェアが常に呼び出されるとは限らないようです。
FindAndUpdate()に関する注記
pre
およびpost
は、_Model.update
_、_.findByIdAndUpdate
_、_.findOneAndUpdate
_、_.findOneAndRemove
_、など、データベースで直接実行される更新操作では呼び出されません。および_.findByIdAndRemove
_。orderpre
またはpost
ミドルウェアを利用するには、ドキュメントをfind()
し、init
、validate
、save
、またはremove
関数。 説明 を参照してください。
更新:この質問を参照してください " created_atフィールドとupdated_atフィールドをマングーススキーマに追加 "
数日以内に、Mongoは新しい2.6バージョンを発表する予定です(現在、実験的な2.5.xバージョンをダウンロードできます)。 他の多くの機能 の中で $ currentDate を使用できます。これはまさにあなたが望むことをするでしょう:
db.users.update(
<criteria>,
{
$currentDate: { yourField: true},
}
)