MongoDB和DateTimeOffset类型

Noe*_*oel 8 mongodb mongodb-.net-driver

我试图找到在指定时间内创建的所有文档.我正在使用c#和mongodb c#驱动程序.

我的实体如下:

public class Entity
{
    public Gid Id { get; private set; }
    public DateTimeOffset CreationTimestamp { get; private set; }
    public Entity()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我想我可以这样做:

DateTime compareTime = DateTime.UtcNow.AddMinutes(-15);
var result = _collection.Find(Query.GT("CreationTimestamp", compareTime)).Count();
Run Code Online (Sandbox Code Playgroud)

即使集合中有数据,结果也是零.如果我从DateTimeOffset更改为DateTime,我将返回结果.

问题是不支持DateTimeOffset类型吗?如果是这样,我需要我的实体使用DateTimeOffset吗?

Cra*_*son 11

DateTimeOffset根本不是序列化为Date,而是(默认情况下),作为[ticks,timezone offset]的数组.因此,您无法以与正常日期相同的方式查询它.相反,我们将根据刻度查询.您需要确保您的时区偏移量相同,否则这将无效.

DateTimeOffsett compareTime = DateTimeOffsett.UtcNow.AddMinutes(-15);
var result = _collection.Find(Query.GT("CreationTimestamp.0", compareTime.Ticks)).Count();
Run Code Online (Sandbox Code Playgroud)

基本上,我们将比较存储数组的第一个元素和tick计数.再次抱歉得到这个答案的时间.