30 秒以上経過したドキュメントのコレクションに対してクエリを実行するための適切なアプローチはありますか? アイテムが特定の状態に 30 秒以上留まった後、そのアイテムを失敗としてマークするクリーンアップ ワーカーを作成しています。
重要ではありませんが、これにはmongojsを使用しています。
すべてのドキュメントにはcreated
時間が関連付けられています。
30 秒以上経過したドキュメントのコレクションに対してクエリを実行するための適切なアプローチはありますか? アイテムが特定の状態に 30 秒以上留まった後、そのアイテムを失敗としてマークするクリーンアップ ワーカーを作成しています。
重要ではありませんが、これにはmongojsを使用しています。
すべてのドキュメントにはcreated
時間が関連付けられています。
mongo シェルを使用してこれを行う場合:
db.requests.find({created: {$lt: new Date((new Date())-1000*60*60*72)}}).count()
...72 時間 (「現在」から「72*60*60*1000」ミリ秒を引いた値) より古いドキュメントを検索します。30 秒は 1000*30 になります。
次のようなものを使用できます。
var d = new Date();
d.setSeconds(d.getSeconds() - 30);
db.mycollection.find({ created_at: { $lt: d } }).forEach(function(err, doc) {} );
TTL オプションも洗練されたソリューションです。x 秒後にドキュメントを自動的に削除するインデックスです。こちらを参照してください: https://docs.mongodb.org/manual/core/index-ttl/
コード例は次のとおりです。
db.yourCollection.createIndex({ created:1 }, { expireAfterSeconds: 30 } )