古いチャットログを削除します。これは、最新の10個以外のすべてのレコードを意味します。mongodb古いチャットを削除
は、ここで私は、最新のを取得しています方法は次のとおりです。
collection.find({"chatroom" : chatroom}).limit(10).sort({ time: -1 })
どのように私は他のすべてを削除しますか?
ありがとうございました。
古いチャットログを削除します。これは、最新の10個以外のすべてのレコードを意味します。mongodb古いチャットを削除
は、ここで私は、最新のを取得しています方法は次のとおりです。
collection.find({"chatroom" : chatroom}).limit(10).sort({ time: -1 })
どのように私は他のすべてを削除しますか?
ありがとうございました。
10番目に古いものを取得し、古いものを削除するクエリを実行できます。
var oldest = find({"chatroom" : chatroom}).limit(1).skip(10).sort({ time: -1 }).next();
remove({"chatroom" : chatroom, time : {$lt : oldest.time }})
適切なフィルタで関連ドキュメントを保持する場合は、結果セットの各項目を繰り返し処理し、個別に削除する必要があります。
どのくらいの頻度でこれを行う必要がありますか? 何人のドキュメントについて話していますか?
オプションの一つは:これが最適解ではないかもしれない一時コレクションから
を最新の10空 いくつかの一時コレクションにログ収集 再挿入を移動 。
capped collectionを使用するとどうなりますか?
size
引数で準備に十分なスペースと、(両方の受注は、私が推測すると同じになります)キャッピングされたコレクションに切り替える場合は、パフォーマンスを向上させるためsort({ $natural: -1 })
とsort({ time: -1 })
をswtichする場合があります10
にmax
を設定します。
私は実際には各チャットルームのために新しいコレクションを作成するつもりはありません – Harry
すべきではありません - >時間:{$ lt:oldest.time} – levhita
levhita:yep、fixed。良いキャッチ。 –