c# - MongoDB.Driver C#自动过期文件

标签 c# mongodb mongodb-.net-driver

我正在将文档插入到一个集合中,并且有一个名为 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);
  1. 如果您希望文档在特定的时钟时间被删除,您可以为生成的索引设置ExpireAfter值。

  2. 如果您希望文档在一定时间后被删除,您可以设置ExpireAt 属性值并将IndexOptions 中的ExpireAfter 设置为0。

关于c# - MongoDB.Driver C#自动过期文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51092220/

相关文章:

javascript - 在 JavaScript 中将 ObjectID (Mongodb) 转换为字符串

mongodb - 请求的内置库在 Dartium 上不可用

mongodb - Mongo Db 使用 C# api 记录检索非常慢

c# - mongodb获取集合名称c#

mongodb - ReplaceOne 抛出重复键异常

c# - 动态处理 UserControl 事件

c# - 为什么不能将值分配给类主体中的属性,除非在其声明中?

c# - 中文 TTS 失败,而英语有效

c# - WCF 客户端如何了解服务器类型

node.js - 使用 mongoose 设置数据库和集合