Пример документа выглядит следующим образом
{
"_id":ObjectId("562e7c594c12942f08fe4192"),
"Type": "f",
"runTime": ISODate("2016-12-21T13:34:00.000+0000"),
"data" : {
"PRICES SPOT" : [
{
"value" : 29.64,
"timeStamp" : ISODate("2016-12-21T23:00:00.000+0000")
},
{
"value" : 29.24,
"timeStamp" : ISODate("2016-12-22T00:00:00.000+0000")
},
{
"value" : 29.81,
"timeStamp" : ISODate("2016-12-22T01:00:00.000+0000")
},
{
"value" : 30.2,
"timeStamp" : ISODate("2016-12-22T02:00:00.000+0000")
},
{
"value" : 29.55,
"timeStamp" : ISODate("2016-12-22T03:00:00.000+0000")
}
]
}
}
Мой MongoDb имеет разные Type
документы, я хотел бы получить курсор для всех документов, которые находятся в диапазоне времени которые имеют type: "f"
, но на самом деле существуют.В базе данных есть некоторые документы, которые нарушили код, который у меня был ранее (который не проверял, существует ли PRICES SPOT
).
Я видел, что я могу использовать $and
и $exists
из документация .Однако у меня возникли проблемы с его настройкой из-за диапазона и вложенности.Я использую pyMongo в качестве драйвера Python и также заметил здесь , что мне нужно заключить в кавычки $and
и $exists
.
Мой код
def grab_forecast_cursor(self, model_dt_from, model_dt_till):
# create cursor with all items that actually exist
cursor = self._collection.find(
{
"$and":[
{'Type': 'f', 'runTime': {"$gte": model_dt_from, "$lte": model_dt_till}
['data']['PRICES SPOT': "$exists": true]}
]})
return cursor
В результате Key Error
не может найти data
.Образец документа, у которого нет PRICE SPOT
, выглядит точно так же, как тот, который я опубликовал в начале, но без этого, соответственно.
Короче говоря .. Может кто-нибудь помочь мне настроить запрос, в котором я могу взять курсор со всеми документами определенного типа, но на самом деле с соответствующим вложенным содержимым.
Обновление
Я добавил запятую после model_dt_till
и теперь имею синтаксическую ошибку .
def grab_forecast_cursor(self, model_dt_from, model_dt_till):
# create cursor with all items that actually exist
cursor = self._collection.find(
{
"$and":[
{'Type': 'f', 'runTime': {"$gte": model_dt_from, "$lte": model_dt_till},
['data']['PRICES SPOT': "$exists": true]}
]})
return cursor