2012-06-09 76 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>}) 
相关问题