2012-06-09 85 views
0

我有一個將存儲訪問者數據的mongodb。我需要在十分鐘後刪除未激活的數據,並通過cron運行命令。我將如何做到這一點?MongoDB使用時間戳進行排序

目前收集的設置,像這樣:

{ "_id" : ObjectId("4fd33e0b0feeda3b2406f6be"), "name" : "Dugley Reanimator", "updated" : "Some form of timestmap" } 

我應該如何去存儲,我搜索的IE收藏我的MySQL版本時間戳:

$sql = mysql_query('DELETE FROM `visitors` WHERE NOW() > DATE_ADD(`last_seen`, INTERVAL 10 MINUTE)'); 
+0

你使用什麼驅動程序? –

+0

默認來自pecl install mongo – Michael

+0

您能否澄清集合中的每個文檔是代表一個會話還是隻是一個大量條目?換句話說,你是否經常更新「更新」字段,或者當有人在網站上做了一些新的事情時,你是否創建了新的條目? –

回答

0

你的驅動程序將使用一個MongoDate時間(這可能映射到PHP中更原生的表示)。
然後,您可以查詢使用類似以下蒙戈聲明:

db.myCollection.find({updated : { $lte : new ISODate("2012-06-09T16:22:50Z") } }) 

粗略翻譯爲PHP是:

$search = array(
    'updated' => array(
    '$lte' => new MongoDate($tenMinutesAgo)) 
); 
$collection->find($search) 

或(警告:未測試):

$tenMinutesAgo = new DateTime(); 
$tenMinutesAgo->modify('-10 minutes'); 

$search = array('updated' => array('$lte' => $tenMinutesAgo)); 
$collection->find($search) 
+0

謝謝,我會嘗試並回復你。 – Michael

1

的的ObjectId有一個時間戳組件它。 see the docs here。這基本上給你一個免費的插入時間,你可以使用for sorting and querying

mongodb驅動器應該給你一種方法來創建一個時間戳的ObjectId。

在Python:

gen_time = datetime.datetime(2010, 1, 1) 
dummy_id = ObjectId.from_datetime(gen_time) 

在Java:

Date d = new Date(some timestamp in ms); 
ObjectId id = new ObjectId(d) 

所以一旦你創建了一個基於 「10分鐘前」 的的ObjectId你可以使用$ LT

做刪除查詢

在js控制檯它將是:

db.collectionName.remove({_id: {$lt: <Your Object Id that represents 10 minutes ago>})