2013-08-22 10 views
1

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; 

    // ... 
} 

을 나는 (심포니 인 2.3.x에서) php app/console doctrine:mongodb:schema:update을 실행할 때 을 :

나는 그것을 시도하고있어 방법이, 내가 어떤 사람이 올바르게 설정 나를 도울 수 있기를 바랍니다 생성 된 색인이 올바르게 보이지 않습니다.

{ "v" : 1, "key" : { "expiration" : 1, "expireAfterSeconds" : 30 }, "ns" : "mydatabase.log", "sparse" : false, "name" : "expiration_1_expireAfterSeconds_-1" } 

내가 수동으로 인덱스를 만들 경우와 동일하지 않습니다 : 그것은 다음과 같은 인덱스를 생성로

db.log.ensureIndex({ "expiration": 1 }, { expireAfterSeconds: 30 }); 

내가 내 데이터베이스에 db.system.indexes.find();을 실행할 때 내가 무엇을 얻을 :

doctrine annotati를 사용하여 날짜 필드에 TTL을 설정하는 방법 ons/config 파일?

답변

2

keys 매개 변수로 인덱스 옵션을 혼합합니다. Index 주석에도 options 매개 변수가 있습니다. Index annotation docs의 예를 참조하십시오

<?php 

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

이 두 번째 인수 db.collection.ensureIndex(){unique: true}을 통과하는 것과 동일합니다. uniqueexpireAfterSeconds으로 대체하면 TTL 색인을 만들 수 있습니다.

+0

답변 해 주셔서 감사합니다. 내가 당신의 대답에 기초하여 사용하는 것을 끝낸 것은 : @MongoDB \ Index (keys = { "expiration"= true}, options = { "expireAfterSeconds"= 30}) – Onema