Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MongoDB and DateTimeOffset type

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?

like image 700
Noel Avatar asked May 07 '12 10:05

Noel


1 Answers

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.

like image 185
Craig Wilson Avatar answered Oct 16 '22 21:10

Craig Wilson