更新:(5年後)
注:カッパアーキテクチャ(イベントソーシング+ CQRS)を使用する場合は、日付を更新する必要はありません。データは不変の追加専用のイベントログであるため、イベントの作成日のみが必要です。以下で説明するLambdaアーキテクチャに似ています。次に、アプリケーションの状態は、イベントログ(派生データ)の予測です。既存のエンティティに関する後続のイベントを受け取った場合は、そのイベントの作成日をエンティティの更新日として使用します。これは、miceroserviceシステムで一般的に使用されている(そして一般的に誤解されている)プラクティスです。
更新:(4年後)
フィールドObjectId
として使用する場合_id
(これは通常のケースです)、必要なことは次のとおりです。
let document = {
updatedAt: new Date(),
}
作成したタイムスタンプを_id
フィールドから取得する方法については、以下の元の回答を確認してください。外部システムのIDを使用する必要がある場合は、Roman Rhrn Nesterovの回答を確認してください。
更新:(2.5年後)
mongooseバージョン> = 4.0で#timestampsオプションを使用できるようになりました。
let ItemSchema = new Schema({
name: { type: String, required: true, trim: true }
},
{
timestamps: true
});
セットタイムスタンプ、マングース割り当てた場合createdAt
やupdatedAt
スキーマにフィールド、割り当てられたタイプがありますDate
。
タイムスタンプファイルの名前を指定することもできます。
timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }
注:重要なデータを含む大きなアプリケーションで作業している場合は、ドキュメントの更新を再検討する必要があります。不変の追加専用データ(ラムダアーキテクチャ)を使用することをお勧めします。これは、挿入のみを許可することを意味します。更新と削除は許可されるべきではありません!レコードを「削除」したい場合は、いくつかのtimestamp
/ version
ファイルを付けてドキュメントの新しいバージョンを簡単に挿入し、deleted
フィールドをに設定できますtrue
。同様に、ドキュメントを更新したい場合は、適切なフィールドを更新し、残りのフィールドをコピーして新しいドキュメントを作成します。次に、このドキュメントをクエリするために、最新のタイムスタンプまたは最新バージョンのドキュメントを取得します。 「削除」されません(deleted
フィールドは未定義またはfalse`)です。
データの不変性により、データを確実にデバッグできます。すべてのドキュメントの履歴を追跡できます。何か問題が発生した場合は、ドキュメントの以前のバージョンにロールバックすることもできます。あなたがそのようなアーキテクチャで行くObjectId.getTimestamp()
なら、あなたが必要とするすべてであり、それはマングースに依存していません。
元の回答:
IDフィールドとしてObjectIdを使用している場合、フィールドは必要ありませんcreated_at
。ObjectIdにはと呼ばれるメソッドがありgetTimestamp()
ます。
ObjectId( "507c7f79bcf86cd7994f6c0e")。getTimestamp()
これにより、次の出力が返されます。
ISODate( "2012-10-15T21:26:17Z")
詳細情報はこちらMongo ObjectIDから作成日を抽出する方法
フィールドを追加updated_at
するには、これを使用する必要があります。
var ArticleSchema = new Schema({
updated_at: { type: Date }
// rest of the fields go here
});
ArticleSchema.pre('save', function(next) {
this.updated_at = Date.now();
next();
});