gpt4 book ai didi

php - 使用 Doctrine MongoDB ODM 为收集设置 TTL

转载 作者:可可西里 更新时间:2023-11-01 10:04:43 33 4
gpt4 key购买 nike

从 MongoDB 2.2 开始,可以将“Expire Data from Collections Using a TTL”实现为一种特殊的索引类型。

最新版本的 Doctrine ORM 支持这个 Index Option .不幸的是,我无法找到如何使用原则注释/配置文件正确设置此索引。

这就是我尝试做的方式,我希望有人能帮助我正确设置它:

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

最佳答案

您将索引选项与 keys 参数混合使用。 Index 注释还有一个 options 参数。请参阅 Index annotation docs 中的示例:

<?php

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

这相当于传递 {unique: true} 作为第二个参数 db.collection.ensureIndex()。您可以将 unique 替换为 expireAfterSeconds 以创建 TTL 索引。

关于php - 使用 Doctrine MongoDB ODM 为收集设置 TTL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18387901/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com