0

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

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

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

4

2 回答 2

0

根据我的经验,请尝试使用_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 门户检查

在此处输入图像描述

_ts6.在字段上创建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>
于 2017-04-05T07:09:28.337 回答
0

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

  1. 转到您的数据库 > 配置 > 预览功能 > 启用每文档 TTL 在此处输入图像描述

  2. 在 DB 数据浏览器、Scale & Settings 中转到您的集合,然后设置您希望对象存在的时间: 在此处输入图像描述

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

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

于 2018-09-23T10:00:07.210 回答