Настройка времени жизни (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>
Более простой способ, который я нашел:
Перейдите в свою БД> Конфигурация> Функции предварительного просмотра> Включить TTL для каждого документа
Перейдите в свою коллекцию в Проводнике данных БД, Scale & Settings и установите время, в которое вы хотите, чтобы объекты жили:
Вы можете указать TTL для каждого объекта при вставке их в БД (это переопределит коллекцию TTL, установленную ранее). Вам просто нужно добавить в ваш документ поле с именем "ttl", которое является
double
с форматом:ttl = 3600.0
И все, документы будут удалены самостоятельно через час. Удачи!