2014-02-16 58 views
0

我是mongoDB的初学者。我想在至少30秒后从我的数据库中删除每条消息。MongoDB php使用TTL with ensureIndex

这是我的代码。

$mess = array(
    "login" => $_SESSION['name'], 
    "message" => $_POST['msg'], 
    "expire" => true 
); 

$db->chat->insert($mess); 
$collection = $db->chat; 
$collection->ensureIndex(array('expire' => true), array('expireAfterSeconds' => 30)); 

回答

2

我不知道坚韧不拔的PHP语法细节,但expire字段必须包含一个日期时间,而不是一个布尔值。例如,您可以将过期设置为现在,并依赖于30s expireAfterSeconds。另外,也可以更灵活,您可以将过期值设置为现在+30秒(允许您为每个文档选择不同的超时时间)。

请注意,TTL功能的工作原理是使用一个监视线程来检查过期的文件。不要期望它是第二准确的(它非常精确)。

如果您的数据非常短暂且用于队列或某物,您可能需要查看加盖集合和可放大游标而不是TTL集合。