Тип MongoDB и DateTimeOffset

Я пытаюсь найти все документы, созданные в течение указанного времени. Я использую 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?

1 ответ

Решение

DateTimeOffset не сериализуется как дата вообще, но (по умолчанию), как массив [тиков, смещение часового пояса]. Таким образом, вы не можете запросить его так же, как и обычную дату. Вместо этого мы будем запрашивать на основе тиков. Вам нужно убедиться, что смещения часовых поясов совпадают, иначе это не сработает.

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

По сути, мы собираемся сравнить первый элемент сохраненного массива с количеством тиков. Снова извините за то время, которое понадобилось, чтобы прийти к этому ответу.

Другие вопросы по тегам