所以我的mongo数据库中有一些dbobjects。以下是其中一个对象的示例:
{ "_id" : { "$oid" : "525b048580c3fb0d62d2b6fc"} , "city" : "London" , "currentWeather" : [ { "cloudcover" : "25" , "humidity" : "82" , "observation_time" : "08:37 PM" , "precipMM" : "0.0" , "pressure" : "1008" , "temp_C" : "11" , "temp_F" : "52" , "visibility" : "10" , "weatherCode" : "113" , "weatherDesc" : [ { "value" : "Clear"}] , "weatherIconUrl" : [ { "value" : "http://cdn.worldweatheronline.net/images/wsymbols01_png_64/wsymbol_0008_clear_sky_night.png"}] , "winddir16Point" : "W" , "winddirDegree" : "280" , "windspeedKmph" : "19" , "windspeedMiles" : "12"}]}
现在,我需要在我的数据库中获取其值低于给定“temp_C”的所有dbobjects,我使用过这样的东西:
BasicDBObject query = new BasicDBObject("temp_C", new BasicDBObject(">", graden));
但它失败了,我认为这是因为该属性是“currentWeather”的子属性,但我不知道如何解决这个问题。我正在使用java来做到这一点。
答案 0 :(得分:1)
查看您的文档结构,您正在尝试访问文档中数组内部的子文档,因此它比标准查询更复杂:
{ "_id" : { "$oid" : "525b048580c3fb0d62d2b6fc"} , <-- Document
"city" : "London" ,
"currentWeather" : [ <-- Array
{ "cloudcover" : "25", <-- Sub document
...etc...
"pressure" : "1008" ,
"temp_C" : "11",
"temp_F" : "52",
...etc...
}
]
}
为了到达嵌套对象,您需要引用它在数组中的位置(在这种情况下,它是零,因为它是数组中的第一个元素),然后是子文档中的字段名称。所以你的查询看起来像这样:
BasicDBObject query = new BasicDBObject("currentWeather.0.temp_C",
new BasicDBObject("$gt", 11));
请注意,原始查询中存在两个问题:
1)您需要参考currentWeather.0.temp_C
2)您的gt
运营商需要以美元符号而不是&符号开头。
另外,你说你希望查询返回值 lower 而不是给定值,在这种情况下你可能想要$ lt而不是$ gt。
答案 1 :(得分:0)