设置TTL在Mongodb c#中不起作用

时间:2017-10-22 05:31:42

标签: 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);

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

 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);

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

 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; }
}

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

2 个答案:

答案 0 :(得分:1)

对于2.8及更高版本,请帮助更多的人。

 var keys = Builders<ResponseCache>.IndexKeys.Ascending("expireAt");
        var model = new CreateIndexModel<ResponseCache>(keys, new CreateIndexOptions() { ExpireAfter = new TimeSpan(0, 15, 0) });
        try
        {

            _repository.Indexes.CreateOne(model);
        }
        catch (Exception ex)
        {

        }

        _repository.InsertOne(responseCache);

使用TTL 15分钟创建索引。对我来说完全正常。

谢谢

答案 1 :(得分:0)

再次阅读Mongodb文档后​​,我的代码中添加=INDEX((OFFSET(sheetA!$F$2,0,5)),MATCH(sheetB!C4,sheetA!A:A,0)) =INDEX((sheetA!$K$2),MATCH(sheetB!C4,sheetA!A:A,0)) =INDEX((sheetA!$K$2),MATCH("BTC",sheetA!A:A,0)) =#REF! 时出错。有一些限制工作Index

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

我尝试在TTL上设置索引,但不包含Name

下面的代码工作正常。

Date

感谢@NeilLunn