0

我是 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));
4

1 回答 1

2

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

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

如果您的数据非常短暂并且用于队列或其他内容,您可能需要查看 capped collections 和 tailable cursors 而不是 TTL 集合。

于 2014-02-16T23:27:57.340 回答