MongoDB.Driver C#自动过期文档

时间:2018-06-28 23:00:46

标签: c# mongodb mongodb-.net-driver

我正在将文档插入集合中,并且有一个名为ExpireWhen的字段。我想在日期过期后自动删除这些文档。我尝试环顾四周,但无法使用适用于C#2.6.1版的mongo db驱动程序查找信息。

我尝试了以下操作,但似乎什么也没做。

    this.CacheItemRecords().Indexes.CreateOneAsync(
        Builders<CacheItemRecordEntry>.IndexKeys.Ascending(_ =>_.ExpireWhen),
        new CreateIndexOptions { ExpireAfter = new TimeSpan(0, 0, 0) }
     );

1 个答案:

答案 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。