【问题标题】:Setting time to live (TTL) in Azure DocumentDB using MongoDB.Driver 2使用 MongoDB.Driver 2 在 Azure DocumentDB 中设置生存时间 (TTL)
【发布时间】:2017-04-04 06:05:42
【问题描述】:

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

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

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

【问题讨论】:

  • “不工作”的意思...什么?有错误信息吗?什么都没有发生?
  • 嗨大卫,代码没有返回任何错误,但插入的文档在 10 秒后没有过期。
  • 如果有用,请将其标记为有助于更多社区的答案。

标签: c# mongodb azure-cosmosdb ttl mongodb.driver


【解决方案1】:

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

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

2.添加一个Person类

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.在_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>

【讨论】:

  • 感谢汤姆孙。就我而言,索引已成功创建,但插入的数据在 azure DocumentDB 中的 10 秒后没有过期。您的测试项目中插入的数据是否会在 10 秒后过期?
  • 当我设置 10 秒后过期时,它在我这边正常工作,之后文档从集合中删除。请尝试使用例如 100sec 来测试。在我的选择中,10 秒对于测试来说有点短。
  • TTL 功能由两个级别的 TTL 属性控制 - 集合级别和文档级别。这些值以秒为单位设置,并被视为 _ts 的增量。请使用_ts 归档。更多信息请参考document。我已经更新了我的回复。
  • 这个选项已经过时了,我已经添加了一种新的方法来为我工作。
【解决方案2】:

我发现的一个更简单的方法是:

  1. 转到您的数据库 > 配置 > 预览功能 > 启用每文档 TTL

  2. 在 DB 数据资源管理器、Scale & Settings 中转到您的集合,然后设置您希望对象存在的时间:

  3. 您可以在将每个对象插入 DB 时为其指定 TTL(这将覆盖之前建立的集合 TTL)。您只需在文档中添加一个名为“ttl”的字段,即double,格式为:ttl = 3600.0

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-05
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多