5

30 秒以上経過したドキュメントのコレクションに対してクエリを実行するための適切なアプローチはありますか? アイテムが特定の状態に 30 秒以上留まった後、そのアイテムを失敗としてマークするクリーンアップ ワーカーを作成しています。

重要ではありませんが、これにはmongojsを使用しています。

すべてのドキュメントにはcreated時間が関連付けられています。

4

4 に答える 4

17

mongo シェルを使用してこれを行う場合:

db.requests.find({created: {$lt: new Date((new Date())-1000*60*60*72)}}).count()

...72 時間 (「現在」から「72*60*60*1000」ミリ秒を引いた値) より古いドキュメントを検索します。30 秒は 1000*30 になります。

于 2014-03-19T19:00:41.710 に答える
4

次のようなものを使用できます。

var d = new Date();
d.setSeconds(d.getSeconds() - 30);

db.mycollection.find({ created_at: { $lt: d } }).forEach(function(err, doc) {} );
于 2014-02-06T00:02:01.150 に答える
2

TTL オプションも洗練されたソリューションです。x 秒後にドキュメントを自動的に削除するインデックスです。こちらを参照してください: https://docs.mongodb.org/manual/core/index-ttl/

コード例は次のとおりです。

db.yourCollection.createIndex({ created:1 }, { expireAfterSeconds: 30 } )

于 2016-04-27T15:58:20.617 に答える