Настройка времени жизни (TTL) в Azure DocumentDB с помощью MongoDB.Driver 2

Я пытаюсь реализовать TTL в DocumentDB с помощью MongoDB.Driver. Я создал индекс как

await collection.Indexes.CreateOneAsync
(
    Builders<T>.IndexKeys.Ascending("_id123"),
    new CreateIndexOptions { ExpireAfter = new TimeSpan(0, 0, 10) }
);

Приведенный выше код создает индекс _id123 без каких-либо ошибок, но вставленные данные не истекают через 10 секунд. Пожалуйста, помогите мне решить эту проблему.

2 ответа

Решение

Исходя из моего опыта, пожалуйста, попробуйте использовать _ts field, Мы можем получить больше информации из документа. Я делаю демонстрацию для создания индекса TTL на моей стороне, он работает правильно. Ниже приведены подробные шаги.

1. Создайте консольный проект C# и добавьте MongoDB SDK

2. Добавить класс человека

using MongoDB.Bson;
public class Person
        {
            public ObjectId Id { get; set; }
            public string Name { get; set; }
        }

3. Создайте клиент MongodB, и мы сможем получить код с портала Azure.

4. Добавить документ в коллекцию

 var db = mongoClient.GetDatabase("dbname");

 var collection = db.GetCollection<Person>("collectionname");

 collection.InsertOne(new Person() {Name = "tom"});

5.Проверьте на портале Azure.

6. Создайте индекс TTL на _ts поле

 var indexs = collection.Indexes.CreateOneAsync(Builders<Person>.IndexKeys.Ascending("_ts"),
 new CreateIndexOptions { ExpireAfter = new TimeSpan(0, 0, 10) }).Result;

Файл Package.config

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="MongoDB.Bson" version="2.4.3" targetFramework="net451" />
  <package id="MongoDB.Driver" version="2.4.3" targetFramework="net451" />
  <package id="MongoDB.Driver.Core" version="2.4.3" targetFramework="net451" />
  <package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net451" />
</packages>

Более простой способ, который я нашел:

  1. Перейдите в свою БД> Конфигурация> Функции предварительного просмотра> Включить TTL для каждого документа

  2. Перейдите в свою коллекцию в Проводнике данных БД, Scale & Settings и установите время, в которое вы хотите, чтобы объекты жили:

  3. Вы можете указать TTL для каждого объекта при вставке их в БД (это переопределит коллекцию TTL, установленную ранее). Вам просто нужно добавить в ваш документ поле с именем "ttl", которое является double с форматом: ttl = 3600.0

И все, документы будут удалены самостоятельно через час. Удачи!

Другие вопросы по тегам