更新:(5年後)
注:Kappaアーキテクチャ(イベントソーシング+ 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
});
タイムスタンプ、マングースの割り当てcreatedAt
、およびupdatedAt
フィールドをスキーマに設定する場合、割り当てられるタイプはDate
です。
タイムスタンプフィールドの名前を指定することもできます。
timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }
注:重要なデータを含む大きなアプリケーションで作業している場合は、ドキュメントの更新を再検討する必要があります。不変の追加専用データ(ラムダアーキテクチャ)を使用することをお勧めします。これが意味するのは、挿入のみを許可するということです。更新と削除は許可されるべきではありません!レコードを「削除」したい場合は、timestamp
/ version
filedを含む新しいバージョンのドキュメントを簡単に挿入してから、deleted
フィールドをに設定できますtrue
。同様に、ドキュメントを更新する場合は、適切なフィールドが更新され、残りのフィールドがコピーされた新しいドキュメントを作成します。次に、このドキュメントをクエリするために、最新のタイムスタンプまたは最高バージョンのドキュメントを取得します。 「削除」されていない(deleted
フィールドが未定義またはfalse`)。
データの不変性により、データをデバッグ可能にすることができます。すべてのドキュメントの履歴を追跡できます。問題が発生した場合は、以前のバージョンのドキュメントにロールバックすることもできます。そのようなアーキテクチャObjectId.getTimestamp()
を使用する場合、必要なのはそれだけであり、マングースに依存しません。
元の回答:
IDフィールドとしてObjectIdを使用している場合、フィールドは必要ありませんcreated_at
。ObjectIdには、と呼ばれるメソッドがありgetTimestamp()
ます。
ObjectId( "507c7f79bcf86cd7994f6c0e")。getTimestamp()
これにより、次の出力が返されます。
ISODate( "2012-10-15T21:26:17Z")
詳細はこちらMongoObjectIDから作成日を抽出するにはどうすればよいですか
filedを追加するには、次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();
});