由於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