Node.jsアプリケーションで、MongoDBコレクションの日付フィールドにTTLインデックスを追加して、指定した日付に期限切れにします。Tongインデックスを使用してMongoDB文書を期限切れにしない
アプリケーションは、getTime()
方法を介してミリ秒に変換し、new Date()
介して現在の日付を取得したユーザ(有効期限)で指定されたミリ秒数を加算し、setTime()
を通じてバック日付フォーマットに結果を変換します。結果は、最終的にMongoDBコレクションに挿入されるJSONオブジェクトのexpireAt
という名前のフィールドに保存されます。
結果は、現在の日付に追加された有効期限に合わせて調整されたUTCタイムゾーンに従った日付を正確に表しているように見えます。たとえば、 expireAt: "2017-05-14T13:59:01.998Z"
(約13:00 UTCに1時間の有効期限で挿入された)。
collection.createIndex({"expireAt": 1}, {expireAfterSeconds: 0, name: "_exp"});
これは、しかし、私にMongoError: Values in the index key pattern cannot be 0
エラーを与え、何のインデックスが作成されませんでしたので、私はに切り替え:
collection.createIndex({"expireAt": 1}, {expireAfterSeconds: 1, name: "_exp"});
私はその後、
expireAt
金融商品取引法で文書を挿入するために進め
この時、私はそれを実行したときに、インデックスが作成された、as I could see using MongoDB Compass
例えばexpireAt: "2017-05-14T13:59:01.998Z"
で説明されているようなd。しかし、文書が期限切れになっていてはいないはずです。さらに、上の図は、TTLインデックスの使用率が0であることを示しています。これは、何らかの理由で挿入された新しいドキュメントがexpireAt
フィールドを持っていてもそのインデックスを使用していないことを示しています。
さらに、MongoDBコンパスは、expireAt
フィールドの内容を、特定のBSON日付タイプの代わりにタイプ文字列として表示します。しかし、コンパスのものなのかどうかはわかりません。フィールド型をString、Object、またはArray以外のものに編集することはできません。
紛失したり、似たような問題に遭遇して誰かが魂を見つけたことがありますか?私は似たような質問で解決策を探してみました。
私はちょうどデシベルに書き込む前に '')( ''新しい日付の値を包み、今、それが正しく日付形式や文書と一緒に保存されていますが正しく期限切れにしているようです。オブジェクトがJSONとして保存され、HTTPリクエストの本文に送信されたという事実と関係していたようです。 –