示例文档如下所示
{
"_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
个文档,我想为{em>时间范围中type: "f"
的所有文档获取光标但是那确实存在。数据库中有一些文件打破了我以前的代码(没有检查PRICES SPOT
是否存在)。
我看到我可以使用documentation中的$and
和$exists
。但是,由于范围和嵌套,我无法进行设置。我使用 pyMongo 作为我的python驱动程序,并注意到here我必须将$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
答案 0 :(得分:1)
您尝试使用Python语法来表示数据结构的路径,但是"数据库"想要"键"的语法使用"点符号":
cursor = self._collection.find({
"Type": "f",
"runTime": { "$gte": model_dt_from, "$lte": model_dt_till },
"data.PRICES SPOT.0": { "$exists": True }
})
你也不需要这样编写$and
,因为所有MongoDB查询条件都已经是AND表达式,而你的部分声明实际上是这样做的,所以要保持一致。
同时检查"非空"数组是'data.PRICES SPOT.0'
,有额外的奖励,不仅你知道它#34;存在",而且它至少有一个要在其中处理的项目
Python和JavaScript在对象/字典构造方面几乎相同,所以你真的应该只能遵循一般文档和这里主要是JavaScript的许多示例。
我个人甚至尝试用有效的JSON在这里注明答案,因此可以选择并解析"由任何语言的用户。但是在这里,python与你可以输入mongo
shell的内容完全相同。当然,True
除外。
有关语法的概述,请参阅"Dot Notation",并在Query on Embedded / Nested Documents
了解更多信息