我在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
中的设置日期不同
答案 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。