Php 使用Doctrine MongoDB ODM设置集合的TTL

Php 使用Doctrine MongoDB ODM设置集合的TTL,php,mongodb,symfony,doctrine-odm,ttl,Php,Mongodb,Symfony,Doctrine Odm,Ttl,由于MongoDB 2.2,可以将“”作为一种特殊的索引类型实现 ORM的最新版本支持这一点。不幸的是,我无法找到如何使用条令注释/配置文件正确设置此索引 这就是我试图做到的,我希望有人能帮助我正确设置: <?php use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB; /** * @MongoDB\Document(collection="log") * @MongoDB\Indexes({ * @Mong

由于MongoDB 2.2,可以将“”作为一种特殊的索引类型实现

ORM的最新版本支持这一点。不幸的是,我无法找到如何使用条令注释/配置文件正确设置此索引

这就是我试图做到的,我希望有人能帮助我正确设置:

<?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;

    // ... 
}
这与手动创建索引不同:

db.log.ensureIndex( { "expiration": 1 }, { expireAfterSeconds: 30 } );
在生成以下索引时:

{ "v" : 1, "key" : { "expiration" : 1 }, "ns" : "mydatabase.log", "name" : "expiration_1", "expireAfterSeconds" : 30 }

如何使用条令注释/配置文件在日期字段上设置TTL?

您将索引选项与
键混用。
索引
注释还有一个
选项
参数。请参见中的示例:


谢谢你的回答!根据您的回答,我最终使用的是:@MongoDB\Index(key={“expiration”=true},options={“expireaftersons”=30})
{ "v" : 1, "key" : { "expiration" : 1 }, "ns" : "mydatabase.log", "name" : "expiration_1", "expireAfterSeconds" : 30 }
<?php

/**
 * @Document(
 *   indexes={
 *     @Index(keys={"username"="desc"}, options={"unique"=true})
 *   }
 * )
 */
class User
{
    //...
}