2016-07-20 15 views
6

特定の時間に文書を削除しようとしています。特定の時刻にMongoDB文書を削除する

const TestSchema = new Schema({ 
expire_at: { 
type: Date, 
}, 
}, { 
timestamps: true, 
}); 
TestSchema.index({expire_at: 1}, {expireAfterSeconds: 0}); 

POST

const test = new TestSchema(this.request.body); 
    test.expire_at = test.end_time; 

    try { 
    yield test.save(); 
    } catch (error) { 
    this.status = 409; 
    this.response.body = error.errors; 
    return; 
    } 

    this.response.body = test; 
    this.status = 201; 

文書がexpire_atで指定した時刻に削除することは思えません。 2016-07-20T05:01:19.567Z

+0

の使用createIndexはあなたがこのスキーマを使用して新しい文書を挿入するために使用しているコードを共有することはできますか? –

+0

@KevinAdistambhaが彼のPOSTリクエストで質問を更新しました。 – safaiyeh

+3

mongoシェルにログインし、db.users.find()。pretty()を実行して、削除されていない文書をコピーして投稿に追加してください。また、db.users.getIndexes()を非常に良くするのにも役立ちます。 – helmy

答えて

3

削除処理が60秒後に実行

私は、この日付フォーマットを使用しています。 したがって、削除時間が経過してから59秒間、文書がそこに存在する可能性があります。

+0

はい、私は認識しています。 60秒後、文書は削除されませんでした。 – safaiyeh

+0

私はmongodbを使用していると信じています> 2.2 – Amit

+0

Mongoose v。4.4.17とMongod v。3.0.12 – safaiyeh

2

TTLインデックスでは、有効期限が切れてもデータの削除は保証されません。データを期限切れにするバックグラウンドタスクは60秒ごとに実行されます。期限切れの文書を削除するごとに60 秒を実行します

バックグラウンドタスク:

のバックグラウンドタスクは、データがはるかにこのウィンドウを超えて存在する可能性があり、パフォーマンスの競合とワークロードの影響を受けることができます。その結果、文書の有効期限と バックグラウンドタスクの実行の間に、 の期間、文書がコレクションに残ることがあります。

除去作業の所要時間は、あなたのmongodインスタンスのワークロード に依存するため、期限切れのデータは、バックグラウンドタスクの実行間 60秒の期間を超えていくつかの時間のために存在してもよいです。

Source

8

これは2時間で文書を削除します:あなたはTTL(生存時間)を使用することができ、特定の時間にMongoDBのドキュメントを削除するには

const TestSchema = new Schema({ 
    expire_at: {type: Date, default: Date.now, expires: 7200} 
}) 

//expired in 2 hours 
5

TTLインデックスは、MongoDBがコレクションからドキュメントを一定時間後に自動的に削除するために使用できる特別な単一フィールドインデックスです。

だからあなたのようなTTLインデックスを作成する必要があります(モンゴシェルコマンド)

db.yourCollecName.createIndex({"expire_at": 1 }, { expireAfterSeconds: 5 }); 

またはあなたはすべての60秒後にチェックするMongoDB、その後

TestSchema.createIndex({"expire_at": 1 }, { expireAfterSeconds: 5 }); 

このインデックスを作成するためにマングースを使用することができますexpire_atの日付時刻が現在の日付時刻よりも小さい場合、このレコードは5秒後に削除されます。

TTLインデックスの有効期限が切れたデータが満了すると直ちに を削除されることを保証するものではありません。 文書の有効期限とMongoDBがデータベースを から削除するまでの間に遅延が生じることがあります。

期限切れのドキュメントを削除するバックグラウンドタスクは、60 秒ごとに実行されます。その結果、文書の有効期限と バックグラウンドタスクの実行の間に、 の期間、文書がコレクションに残ることがあります。

TTL Indexes

NB:かわりにindex

関連する問題