问题
I am trying to find all documents that are created within a specified time. I am using c# and the mongodb c# driver.
My entity is as follows:
public class Entity
{
public Gid Id { get; private set; }
public DateTimeOffset CreationTimestamp { get; private set; }
public Entity()
{
}
}
So I thought I could do this:
DateTime compareTime = DateTime.UtcNow.AddMinutes(-15);
var result = _collection.Find(Query.GT("CreationTimestamp", compareTime)).Count();
Result is a count of zero even though there is data in the collection. If I change from DateTimeOffset to DateTime I will get back a result.
Is the issue that DateTimeOffset type is not supported? If so is there a way around this as I need my entities to use DateTimeOffset?
回答1:
DateTimeOffset is not serialized as a Date at all, but (by default), as an array of [ticks, timezone offset]. As such, you cannot query it the same way you would a normal date. Instead, we'll query based on the ticks. You'll need to make sure your timezone offsets are the same, otherwise this won't work.
DateTimeOffsett compareTime = DateTimeOffsett.UtcNow.AddMinutes(-15);
var result = _collection.Find(Query.GT("CreationTimestamp.0", compareTime.Ticks)).Count();
Basically, we are going to compare the first element of the stored array with the tick count. Sorry again for the time it took to arrive at this answer.
来源:https://stackoverflow.com/questions/10480127/mongodb-and-datetimeoffset-type