使用 MongoDB.Driver 2 在 Azure DocumentDB 中设置生存时间 (TTL)

Setting time to live (TTL) in Azure DocumentDB using MongoDB.Driver 2

我正在尝试使用 MongoDB.Driver 在 DocumentDB 中实现 TTL。我创建了一个像

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

以上代码创建 _id123 索引没有任何错误,但插入的数据不会在 10 秒后过期。请帮我解决这个问题。

根据我的经验,请尝试使用_ts field。我们可以从document中获得更多信息。 我做了一个在我这边创建 TTL 索引的演示,它工作正常。以下是详细步骤。

1.Create C# 控制台项目并添加 MongoDB SDK

2.Add一个人Class

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

3.Create MongodB 客户端,我们可以从 Azure 门户获取代码。

4.Add 文件到 collection

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

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

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

5.Check 来自 Azure 门户

6.Create _ts 字段上的 TTL 索引

 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. 在 DB 数据资源管理器、缩放和设置中转到您的集合,然后设置您希望对象存活的时间:

  3. 您可以在将对象插入数据库时​​指定每个对象的 TTL(这将覆盖之前建立的集合 TTL)。您只需要在文档中添加一个名为 "ttl" 的字段,它是一个 double,格式为:ttl = 3600.0

就是这样,文件将在一个小时后自行删除。祝你好运!