如何从java,mongodb中的dbobject获取属性

时间:2013-10-14 17:57:48

标签: java mongodb rest

所以我的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("&gt", graden));

但它失败了,我认为这是因为该属性是“currentWeather”的子属性,但我不知道如何解决这个问题。我正在使用java来做到这一点。

2 个答案:

答案 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)

您无法在查询中直接使用数组对象的值。您可以使用Mongo的aggregate框架。 Java Docs For Aggregate是here