MongoDB php使用带有ensureIndex的TTL

时间:2014-02-16 22:11:58

标签: php mongodb ttl

我是mongoDB的初学者。我想在至少30秒之后删除数据库中的每条消息。

这是我的代码。

$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));

1 个答案:

答案 0 :(得分:2)

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

请注意,TTL功能使用监控线程,该线程将不时检查过期的文档。不要指望它是第二精确的(它相当精确)。

如果您的数据非常短暂并且用于队列或某些内容,您可能需要查看上限集合和tailable游标而不是TTL集合。