0

Casbah の ensureIndex API を使用して、Mongo でコレクションを期限切れにしようとしています。

このドキュメント http://docs.mongodb.org/manual/tutorial/expire-data/に基づく

私はcasbahの提案されたensureIndex APIを使用しています

 collection.ensureIndex(DBObject("status" -> 1, "expireAfterSeconds" -> 120))

コレクションを 2 分で期限切れにするには ...

コレクションは削除されていないか、有効期限が切れていません。

ここで他に何か不足していますか?

ありがとう

4

2 に答える 2

3

確認すべき点がいくつかあります。

  1. statusドキュメントを T にたどり、ドキュメントに実際には存在しないフィールドにインデックスを作成しようとしただけですか? (少なくとも尋ねなければなりませんでした...
  2. statusフィールドに JUST が含まれていますかdates? 理論的には混合できますが、日付タイプのドキュメントのみが有効期限切れと見なされます。
  3. コレクションのインデックスをチェックして、インデックスが正しく作成されていることを確認しましたか?

コンソールからインデックスを確認するには、次を実行しますdb.collection.getIndexes()。インデックスが正常に作成された場合はstatus、ドキュメントに対応するフィールドがあり、それらが適切な日付であることを再確認してください。

インデックスだけを追加しても、日付フィールドは作成されません。ドキュメントに追加するか、他のインデックスの一部ではない既存の日付フィールドを使用する必要があります。

また、ドキュメントから注意してください:

TTL インデックスは、60 秒ごとに実行されるバックグラウンド タスクでドキュメントを削除することにより、データを期限切れにします

そのため、有効期限がある場合は、ドキュメントの有効期限が切れて、バックグラウンド タスクが最後に実行された時期に応じて、ドキュメントが最大、ギブまたはテイク120 secondのままになる可能性があることに注意してください。120 seconds179 seconds

edit : コメントに記載されているように、TTL インデックスに基づいてコレクション自体を削除することはできません。インデックスはコレクション内のドキュメントのみを期限切れにします。

于 2013-08-16T05:34:39.327 に答える
0

オプションを間違った方法で渡していると思います。

そのはず-

collection.ensureIndex(DBObject("status" -> 1), DBObject("expireAfterSeconds" -> 120))

それ以外の-

collection.ensureIndex(DBObject("status" -> 1, "expireAfterSeconds" -> 120))
于 2016-02-08T12:15:52.377 に答える