【问题标题】:How to create MongoDB TTL Index for DatetimeOffset stored as an array [ticks,offset]?如何为存储为数组 [ticks,offset] 的 DatetimeOffset 创建 MongoDB TTL 索引?
【发布时间】:2018-12-19 16:55:43
【问题描述】:

我正在尝试在包含具有 DateTimeOffset 的文档的集合上创建 MongoDB TTL 索引。但是日期被保存为一个刻度数组和偏移量,例如[刻度,偏移量]。 例如:

TimeStamp:Array [
    0:636803424000000000, 
    1:-360]

我的模型如下所示:

public class Log
{
    ....
    DateTimeOffset? TimeStamp{get; set;}
}

我正在使用 MongoDb.Driver v2.7.2,我一直在尝试以这种方式创建索引

....
var indexKeysDefinition = Builders<Log>.IndexKeys.Descending(l => l.TimeStamp);
var indexOptions = new CreateIndexOptions 
{ 
    ExpireAfter = TimeSpan..FromTicks(TimeSpan.TicksPerMinute), 
    Name = "LogsTimeStamPIndex", 
    Background = true 
};
var model = new CreateIndexModel<Log>(indexKeysDefinition, indexOptions);
await _database.GetCollection<Log>("Log").Indexes.CreateOneAsync(model);
....

这是在创建索引,但文档在 1 分钟后没有过期。如何为以这种方式存储的 DateTimeOffset 创建 TTL?或者我在这里错过了什么?

【问题讨论】:

  • 我对 C# 不是很熟悉,但看起来文档是使用时间戳值存储的。 TTL 索引只会使索引字段为日期或包含日期数组的文档过期。见stackoverflow.com/questions/53766763/…
  • 感谢您的链接。我已经看过了,但令人费解的是为什么 MongoDb 以 [ticks, offset] 格式存储 DateTimeOffset 并且无法直接在它们上创建 TTL 索引。

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


【解决方案1】:

我想这将有助于将来的某人。 我的团队实际上与 MognoDb 工程师取得了联系,他们已通知我们日期必须是用于 TTL 索引的 ISO 日期。显然 [tick, offset] 的格式不正确。再次感谢 Adam Harrison 早先指出这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 2015-11-17
    • 2021-07-22
    • 1970-01-01
    • 2015-01-09
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多