#python #pymongo
#python #pymongo
Вопрос:
У меня есть более 100 документов, в mongodb
которых есть следующие данные:
{
"Length": 2.9,
"Number": 33,
"Stop Time": "2020-09-20T11:05:58",
"Start Time": "2020-09-20T11:05:53"
}
Я хочу, чтобы запрос получал все документы, которые имеют Start Time
больше, чем, скажем 2020-09-20T11:00:00
, и меньше, чем "Stop Time": "2020-09-21T11:10:00"
Для этого я написал запрос ниже
query = [{'$match': {'Start Time': {'$gte': '2020-09-20T11:00:00'}, 'Stop Time': {'$lt': '2020-09-21T11:10:00'}}}]
Итак, я хочу получить все документы между датой 2020-09-20T11:00:00
и временем до 2020-09-21T11:10:00
.
В mongodb я проверил вручную, и у меня есть 56 документов, представленных для указанного выше диапазона дат и времени, но, выполнив этот запрос, я могу получить только for 2020-09-20
, и для него нет данных 2020-09-21
. Чего-нибудь не хватает в моем запросе
data_list = []
document = opc_collection.aggregate(query)
for x in document:
data_list.append(x)
print(data_list)
Редактировать:
Ниже приведены данные после преобразования из строки в дату и время в БД:
{
"Length": 2.9,
"Number": 33,
"Stop Time": "2020-09-20 11:05:58",
"Start Time": "2020-09-20 11:05:53"
}
query = [{'$match': {'Start Time': {'$gte': '2020-09-20 11:00:00'}, 'Stop Time': {'$lt': '2020-09-21 11:10:00'}}}]
Ответ №1:
ваша дата 2020-09-20T11:00:00
имеет тип string . Вы должны преобразовать его в datetime.
datetime.datetime.strptime("2020-09-20T11:00:00", '%Y-%m-%dT%H:%M:%S')
Комментарии:
1. Дата-время, хранящееся в mongodb, также находится в строке, и если бы это было так, я бы не получил данные для
2020-09-20
. Пожалуйста, поправьте меня, если я ошибаюсь.2. О, хорошо. Возможно ли изменить тип в базе данных и вместо этого сохранить даты? Потому что pymongo будет сравнивать строки в алфавитном порядке и не будет сравнивать их как даты. Однако возможно изменить тип поля в запросе mongo, но это будет медленнее, чем прямое сравнение дат.
3. Я просто провел быстрый тест, сохранив дату и время вместо строки. Прежде всего, я не знаю, почему текущее время
20:52
, но mongodb сохраняет его как02:23
. Я применил приведенный выше запрос, но до сих пор не получил никаких результатов4. Разница во времени, возможно, связана с часовым поясом. Mongo хранит параметр в конце даты, как в
2020-09-21T12:08:46.512890 02:00
. Итак, у вас естьISODate(...)
в БД, и когда вы запрашиваете, вы преобразовали свою строку в объект datetime?5. Итак, когда я запрашиваю, я должен запрашивать на основе текущего времени или часового пояса, сохраненного в БД?