Тип 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();
По сути, мы собираемся сравнить первый элемент сохраненного массива с количеством тиков. Снова извините за то время, которое понадобилось, чтобы прийти к этому ответу.