9

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

我的实体如下:

public class Entity
{
    public Gid Id { get; private set; }
    public DateTimeOffset CreationTimestamp { get; private set; }
    public Entity()
    {
    }
}

所以我想我可以这样做:

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

即使集合中有数据,结果也是零计数。如果我从 DateTimeOffset 更改为 DateTime 我会得到一个结果。

是不支持 DateTimeOffset 类型的问题吗?如果是这样,有没有办法解决这个问题,因为我需要我的实体使用 DateTimeOffset?

4

1 回答 1

12

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

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

基本上,我们将存储数组的第一个元素与滴答计数进行比较。再次为得到这个答案所花费的时间感到抱歉。

于 2012-05-07T12:57:19.377 回答