我正在将文档插入到一个集合中,并且有一个名为 ExpireWhen 的字段。我想在日期过期时自动删除这些文件。我尝试环顾四周,但无法使用适用于 c# 2.6.1 版的 mongo db 驱动程序找到信息
我尝试了以下但它似乎没有做任何事情:
this.CacheItemRecords().Indexes.CreateOneAsync(
Builders<CacheItemRecordEntry>.IndexKeys.Ascending(c => c.ExpireWhen),
new CreateIndexOptions { ExpireAfter = new TimeSpan(0, 0, 0) }
);
最佳答案
根据 MongoDB 文档, TTL 索引是特殊的单字段索引,MongoDB 可以使用它在一定时间后或在特定时钟时间自动从集合中删除文档。
以下是我如何使这两种情况都有效:
public class MongoLogMessage
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
**[BsonElement("expiry")]
public DateTime ExpireAt { get; set; }**
}
var indexKeysDefinition = Builders<MongoLogMessage>.IndexKeys.Ascending("ExpireAt");
var indexOptions = new CreateIndexOptions { **ExpireAfter = new TimeSpan(0, 0, 0)** };
var indexModel = new CreateIndexModel<MongoLogMessage>(indexKeysDefinition, indexOptions);
_mongoCollection.Indexes.CreateOne(indexModel);
如果您希望文档在特定的时钟时间被删除,您可以为生成的索引设置ExpireAfter值。
如果您希望文档在一定时间后被删除,您可以设置ExpireAt 属性值并将IndexOptions 中的ExpireAfter 设置为0。
关于c# - MongoDB.Driver C#自动过期文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51092220/