Если пространство не является проблемой для хранения дополнительных денормализованных полей, и вы находитесь в части разработки приложения (поэтому вам не нужно возвращаться и изменять существующие данные), вы можете:
- Сохраните начальный час и конечный час как дополнительные атрибуты для сохранения часа / минут.
- Применение составных индексов к start_time, start_hour и end_time, end_hour , чтобы ваша поисковая производительность была хорошей.
- Запустить запрос по всем четырем полям.
См. Образец документа:
{
_id: "4e9650ed1d41c811bc000000",
bid: 31.0,
start_time: 2011-04-04 09:30:00 UTC,
start_hour: "09:30:00", // new field
volume: 31.0,
end_time: 2011-04-04 09:59:59 UTC,
end_hour: "09:59:59", // new field
ask: 0.0 ,
price 1329.75
}
Похоже, что ответ на ваши вопросы заключается в том, что вы не можете эффективно разделить компоненты даты и времени в своем запросе и, например, использовать индексы для ускорения запросов.
Мое предложение выше требует небольшого изменения схемы для достижения того, что вам нужно. Похоже, это сильно окупится за потерю нескольких байт на каждый документ и незначительные изменения кода.
Если у вас есть существующие данные, вы можете запустить Map / Reduce, чтобы разделить компоненты в новую коллекцию и использовать эту новую коллекцию в будущем.
Надеюсь, это поможет.