Начиная с MongoDB 2.2, можно "утратить срок действия данных из коллекций с использованием TTL" который реализован как специальный тип индекса.
Последняя версия Doctrine 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;
// ...
}
Затем, когда я выполняю 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 }
Как мне настроить TTL для поля даты, используя аннотации доктрины/файлы конфигурации?