由于MongoDB 2.2可以将“Expire Data from Collections Using a TTL”作为特殊索引类型实现。使用Doctrine MongoDB设置TTL收集ODM
最新版本的Doctrine ORM支持这个Index Option。不幸的是,我一直无法找到如何使用doctrine annotations/config文件正确设置此索引。
这是我如何努力做到这一点,我希望有人能帮助我正确设置它:
<?php
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
/**
* @MongoDB\Document(collection="log")
* @MongoDB\Indexes({
* @MongoDB\Index(keys={"expiration"=1, "expireAfterSeconds"=30})
* //... other indexes go here
* })
*
*/
class Log
{
// ...
/**
* @MongoDB\Date
*/
protected $expiration;
// ...
}
后来,当我执行php app/console doctrine:mongodb:schema:update
(symfony的2.3.x版本) 生成索引,但生成的索引看起来不正确。
这是我所得到的,当我在数据库中执行db.system.indexes.find();
:
{ "v" : 1, "key" : { "expiration" : 1, "expireAfterSeconds" : 30 }, "ns" : "mydatabase.log", "sparse" : false, "name" : "expiration_1_expireAfterSeconds_-1" }
,如果我手动创建的指数,这是不一样的:
db.log.ensureIndex({ "expiration": 1 }, { expireAfterSeconds: 30 });
,因为它会生成以下指数:
{ "v" : 1, "key" : { "expiration" : 1 }, "ns" : "mydatabase.log", "name" : "expiration_1", "expireAfterSeconds" : 30 }
如何使用doctrine annotati在日期字段上设置TTL ons/config文件?
谢谢你的回答!根据你的回答我最终使用的是:@MongoDB \ Index(keys = {“expiration”= true},options = {“expireAfterSeconds”= 30}) – Onema