2016-12-02 5 views
-1

スパースフィールドをTTLできますか?もしそうなら、あなたはTTLインデックスをスパース宣言するべきですか?そのようです?MongoDB TTLスパースインデックス?

db.eventlog.createIndex({ "lastModifiedDate": 1 }, { expireAfterSeconds: 3600 , sparse:"true"}) 
+0

より良い質問は、インデックスが疎であれば良いでしょうか? TTLと疎なインデックスに関するドキュメントを読んだ後に私には分かりません: – mjaskowski

答えて

1
> use foo 
switched to db foo 
> db.foo.createIndex({date: 1}, {expireAfterSeconds: 5, sparse: true}) 
{ 
    "createdCollectionAutomatically" : false, 
    "numIndexesBefore" : 1, 
    "numIndexesAfter" : 2, 
    "ok" : 1 
} 

> db.foo.getIndexes() 
[ 
    { 
     "v" : 1, 
     "key" : { 
      "_id" : 1 
     }, 
     "name" : "_id_", 
     "ns" : "foo.foo" 
    }, 
    { 
     "v" : 1, 
     "key" : { 
      "date" : 1 
     }, 
     "name" : "date_1", 
     "ns" : "foo.foo", 
     "expireAfterSeconds" : 5, 
     "sparse" : true 
    } 
] 

> db.foo.insert({date: new Date()}) 

> db.foo.find() 
{ "_id" : ObjectId("5841aeb650b5412e92ebbb9b"), "date" : ISODate("2016-12-02T17:26:14.617Z") } 

> db.foo.find() 
> 

うまく働いたことが表示されます。 documentationによれば、TTL操作は60秒ごとに起動するため、expireAfterSeconds:5に時間がかかることがあります。