2016-09-29 76 views
4

我試圖讓Mongo刪除帶有TTL功能的文檔,但沒有成功。已經嘗試了很多東西,但mongo似乎沒有清理。Mongo TTL清理不起作用

我的索引:

{ 
    "v" : 1, 
    "key" : { 
     "date" : 1 
    }, 
    "name" : "date_1", 
    "ns" : "history.history", 
    "expireAfterSeconds" : 60 
} 

從文檔的日期值:

 "date" : "2016-09-29 11:08:46.461207", 

從db.serverStatus輸出()metrics.ttl:從分貝

{ "deletedDocuments" : NumberLong(0), "passes" : NumberLong(29) } 

時間輸出.serverStatus():

"localTime" : ISODate("2016-09-29T11:19:45.345Z") 

唯一我懷疑的是我從Python插入值的方式。可能是因爲它在某種程度上是錯誤的。我有一個包含以下元素的JSON文檔:

"date": str(datetime.utcnow()), 

任何問題可能出現的線索?

感謝, 詹尼斯

回答

2

正如你已經猜到了,問題是你如何插入日期值。我會引用docs

如果文檔中的索引的字段不是日期或 持有日期值(一個或多個),該文件不會過期的數組。

您正在將日期轉換爲字符串。如果您使用的是pymongo驅動程序,他會很好地處理日期時間並將其轉換爲MongoDB本機Date type

這樣,下面應該工作:

"date": datetime.utcnow() 
+0

謝謝你的提示。試過並得到異常:datetime.datetime(2016,9,30,6,33,2,771754)不是JSON可序列化的。我猜是因爲我在預先準備好的JSON文檔上執行了json.dumps()。 –

+0

@JanisJansons pymongo正確處理python字典和列表以及大多數類型,不需要使用json.dumps()。 – joao

+0

謝謝。我多麼愚蠢;)刪除了代碼,現在一切都很好,可以看到清理按預期工作。謝謝大家。 –