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