web-dev-qa-db-ja.com

MongoDB:コレクション内の最終更新ドキュメントの最終更新タイムスタンプを取得する方法

コレクションに(最後に更新されたドキュメントの)最後に更新されたタイムスタンプを取得する単純なORエレガントなメソッド(または私が作成できるクエリ)があります。このようなクエリを作成して、最後に挿入されたドキュメント

db.collection.find().limit(1).sort({$natural:-1})

しかし、最後に更新されたドキュメントに関する情報が必要です(挿入または更新である可能性があります)。

1つの方法は、コレクションの最後のレコードについてoplogコレクションをクエリすることです。しかし、oplogは非常に大きなサイズになる可能性があるという事実を考えると、コストのかかる操作のように見えます(上限付きコレクションであるため、信頼できません)。これを行うより良い方法はありますか?

ありがとう!

6
void

あなたは質問で述べたのと同じ方法で最後の挿入時間を得ることができます:

db.collection.find().sort({'_id': -1}).limit(1) 

しかし、最後の更新/削除時刻を確認する良い方法はありません。ただし、レプリカセットを使用している場合は、oplogから取得できます。

または、ドキュメントに新しいフィールドを'lastModified'として追加できます。 collection-hooks をチェックアウトすることもできます。これが役に立てば幸い

5
Anirudh Bagri
  1. それを行う1つの方法は、最後の更新の時刻を保持するフィールドを持つことです。あなたはそれをupdatedAtと名付けることができます。ドキュメントを更新するたびに、値を現在の時刻に更新するだけです。 ISO形式を使用して時間を保存すると、問題なく並べ替えることができます(これを使用しています)。

  2. もう1つの方法は_idフィールドです。

方法1 db.collection.find()。limit(1).sort({updatedAt:-1})

方法2 db.collection.find()。limit(1).sort({_ id:-1})

1
Balocodes