我正在将文档插入集合中,并且有一个名为ExpireWhen的字段。我想在日期过期后自动删除这些文档。我尝试环顾四周,但无法使用适用于C#2.6.1版的mongo db驱动程序查找信息。
我尝试了以下操作,但似乎什么也没做。
this.CacheItemRecords().Indexes.CreateOneAsync(
Builders<CacheItemRecordEntry>.IndexKeys.Ascending(_ =>_.ExpireWhen),
new CreateIndexOptions { ExpireAfter = new TimeSpan(0, 0, 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。