如何使用 C# MongoDriver 在 MongoDB 中设置 TTL

osm*_*imi 4 c# mongodb

我在 c# 中使用 MongoDb 。我插入一个学生,如下所示

_client = new MongoClient(new MongoClientSettings
{
    Server = new MongoServerAddress("172.1.9.8", 27017)
});
_database = _client.GetDatabase("MongoSample");

Student st = new Student()
{
    Name = "Ali",
    Family = "Valid",
    Age = 25,
    expireAt = DateTime.Now.AddSeconds(30)
};
var collection = _database.GetCollection<Student>("Students");
collection.InsertOne(st);
Run Code Online (Sandbox Code Playgroud)

我想设置 aTTL 几秒钟后删除数据,我尝试这样做:

var collection = _database.GetCollection<Student>("Students");
var indexs = collection.Indexes.CreateOne(Builders<Student>.IndexKeys.Ascending("Name"),
            new CreateIndexOptions { ExpireAfter = new TimeSpan(0, 0, 10) });

collection.InsertOne(st);
Run Code Online (Sandbox Code Playgroud)

但它不起作用。我的模型是:

public class Student
{
    public string Name { get; set; }
    public string Family { get; set; }
    public int Age { get; set; }
    [BsonElement("expireAt")]
    public DateTime expireAt { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

注意:我有问题DateTime,数据库中存储的数据与设置日期不同Visual Studio

osm*_*imi 5

再次阅读Mongodb文档后​​,我的代码有一个错误需要添加Index。工作有一些限制TTL

如果文档中的索引字段不是日期或保存日期值的数组,则文档不会过期。

我尝试设置索引,Name但它不包含Date.

下面的代码工作正常。

var indexKeysDefinition = Builders<Student>.IndexKeys.Ascending("expireAt");
var indexOptions = new CreateIndexOptions { ExpireAfter = new TimeSpan(0, 0, 60) };
var indexModel = new CreateIndexModel<Student>(indexKeysDefinition, indexOptions);
collection.Indexes.CreateOne(indexModel);
Run Code Online (Sandbox Code Playgroud)

感谢@NeilLunn