0

訪問者データを保存するmongodbがあります。アクティブになってから10分後にデータを削除する必要があり、cronを介してコマンドを実行します。どうすればいいですか?

現在、コレクションは次のように設定されています。

{ "_id" : ObjectId("4fd33e0b0feeda3b2406f6be"), "name" : "Dugley Reanimator", "updated" : "Some form of timestmap" }

IEでコレクションを検索してMySqlバージョンを検索するタイムスタンプを保存するにはどうすればよいですか?

$sql = mysql_query('DELETE FROM `visitors` WHERE NOW() > DATE_ADD(`last_seen`, INTERVAL 10 MINUTE)');
4

3 に答える 3

1

ObjectId にはタイムスタンプ コンポーネントがあります。こちらのドキュメントを参照してくださいこれにより、基本的に、並べ替えやクエリに使用できる自由な挿入時間が得られます。

mongodb ドライブは、タイムスタンプから ObjectId を作成する方法を提供するはずです。

Python の場合:

gen_time = datetime.datetime(2010, 1, 1)
dummy_id = ObjectId.from_datetime(gen_time)

Java の場合:

Date d = new Date(some timestamp in ms);
ObjectId id = new ObjectId(d)

したがって、「10 分前」に基づいて ObjectId を作成したら、$lt を使用して削除クエリを実行できます。

js コンソールでは次のようになります。

db.collectionName.remove({_id: {$lt: <Your Object Id that represents 10 minutes ago>})   
于 2012-06-09T22:24:55.157 に答える
1

これを行う最善の方法 (挿入時にタイムスタンプが同じ場合) は、_id フィールドを使用します。

_id フィールドは時間を示し、$lte クエリを実行して古い値を削除できます。

私はそれについてここに書いています:http://blog.dicarsio.com/post/10739857186/quick-snippet-get-creation-time-from-id-on-mongodb

于 2012-06-09T18:01:06.960 に答える
0

ドライバーは MongoDate 時刻を使用します (これは、PHP のよりネイティブな表現にマップされる場合があります)。
次に、次の mongo ステートメントのようなものを使用してクエリを実行できます。

db.myCollection.find({updated : { $lte : new ISODate("2012-06-09T16:22:50Z") } })

PHP の大まかな翻訳は次のようになります。

$search = array(
  'updated' => array(
    '$lte' => new MongoDate($tenMinutesAgo))
);
$collection->find($search)

または(注意:テストされていません):

$tenMinutesAgo = new DateTime();
$tenMinutesAgo->modify('-10 minutes');

$search = array('updated' => array('$lte' => $tenMinutesAgo));
$collection->find($search)
于 2012-06-09T15:31:55.500 に答える