Запрос в пределах временного диапазона в монго

У меня есть база данных mongo, в которой я храню дату и время в отдельных полях (у меня нет возможности изменить эту настройку). Погуглив, я нашел примеры людей, запрашивающих даты и время, разбивая поля на 2 части, 1 для даты и 1 для времени, например:

{"dateField": {"d": "06/18/2012" "t": "12:00:00 AM"}}
{"timeField": {"d": "06/18/2012" "t": "12:07:10 PM"}}

Я видел людей (и сам смог) запросить часть даты:

db.collection.find({"dateField.d": {"$gte": "06/18/2012"}})

Моя проблема в том, что я не могу получить точные результаты, пытаясь сделать то же самое со временем:

db.collection.find({"timeField.t": {"$gte": "12:00:00 PM"}})

Есть ли особый способ форматирования данных о времени для запроса? Или есть лучший способ хранения данных о времени, чтобы я мог запрашивать только время (без зависимости от даты)?


person Eric Hydrick    schedule 18.06.2012    source источник


Ответы (1)


Вам нужно хранить данные в реальном формате даты или в виде чисел. Когда вы выполняете эти поиски, сравнение использует порядок лексикографии, который вам не нужен. Если вы хотите использовать строки, вам следует использовать один из форматов ISO, где он работает.

person Scott Hernandez    schedule 18.06.2012
comment
Звучит как плохой способ [сохранение дат в виде строк]. - person monksy; 18.06.2012
comment
Спасибо, конвертация в форматы ISO сработала. @monksy Хотя я бы предпочел хранить даты и время как объекты, проблема в том, что информация о дате и времени хранится в отдельных полях, и мне нужно что-то, что содержит только время и время. К сожалению, каждое представление объекта, которое я мог найти, сочетало время с датой (которая может быть или не быть правильной датой по прошествии времени и изменении данных). - person Eric Hydrick; 18.06.2012