sql >> データベース >  >> NoSQL >> MongoDB

created_atフィールドとupdated_atフィールドをマングーススキーマに追加します

    更新: (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();
    });
    


    1. ノード/redisとコールバックの制御フローの問題?

    2. データベース自動化を開始する方法

    3. Model.find()はマングースで空を返します

    4. Dockerコンテナ内のRedis接続エラー