Nano Hash - криптовалюты, майнинг, программирование

Установка TTL для сбора с помощью Doctrine MongoDB ODM

Начиная с 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 для поля даты, используя аннотации доктрины/файлы конфигурации?


Ответы:


1

Вы смешиваете параметры индекса с параметром keys. Аннотация Index также имеет параметр options. См. пример в Документы с аннотациями индекса:

<?php

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

Это эквивалентно передаче {unique: true} в качестве второго аргумента db.collection.ensureIndex(). Вы можете заменить unique на expireAfterSeconds, чтобы создать индекс TTL.

23.08.2013
  • Спасибо за ответ! что я в итоге использовал на основе вашего ответа: @MongoDB\Index(keys={expiration=true}, options={expireAfterSeconds=30}) 24.08.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..