2011-06-17 24 views
0

古いチャットログを削除します。これは、最新の10個以外のすべてのレコードを意味します。mongodb古いチャットを削除

は、ここで私は、最新のを取得しています方法は次のとおりです。

collection.find({"chatroom" : chatroom}).limit(10).sort({ time: -1 }) 

どのように私は他のすべてを削除しますか?

ありがとうございました。

答えて

3

10番目に古いものを取得し、古いものを削除するクエリを実行できます。

var oldest = find({"chatroom" : chatroom}).limit(1).skip(10).sort({ time: -1 }).next(); 
remove({"chatroom" : chatroom, time : {$lt : oldest.time }}) 
+0

すべきではありません - >時間:{$ lt:oldest.time} – levhita

+0

levhita:yep、fixed。良いキャッチ。 –

0

適切なフィルタで関連ドキュメントを保持する場合は、結果セットの各項目を繰り返し処理し、個別に削除する必要があります。

-1

どのくらいの頻度でこれを行う必要がありますか? 何人のドキュメントについて話していますか?

オプションの一つは:これが最適解ではないかもしれない一時コレクションから

を最新の10空 いくつかの一時コレクションにログ収集 再挿入を移動 。

+0

最新の10件を取得するたびに古いものをダンプします。これがあまりにも頻繁であれば、私はそれをやりにくくすることができます。 – Harry

+0

合計カウントをどこかに保持してから、各削除ごとに挿入または減分ごとにインクリメントする必要があります。あなたはこの数を読んで、あなたが10以上の項目を持っているかどうかを判断します。それ以外の場合はどうやってチェックしていますか? – kheya

0

capped collectionを使用するとどうなりますか?

size引数で準備に十分なスペースと、(両方の受注は、私が推測すると同じになります)キャッピングされたコレクションに切り替える場合は、パフォーマンスを向上させるためsort({ $natural: -1 })sort({ time: -1 })をswtichする場合があります10

maxを設定します。

+1

私は実際には各チャットルームのために新しいコレクションを作成するつもりはありません – Harry

関連する問題