2013-10-14 117 views
0

所以我在我的mongo数据库中有几个dbobjects。这里的对象之一的例子:如何从java中的dbobject获取属性属性,mongodb

{ "_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"}]} 

现在,我需要把所有的dbobjects在我的数据库,其值是给定的“temp_C”时,我已经使用这样的事情:

BasicDBObject query = new BasicDBObject("temp_C", new BasicDBObject("&gt", graden)); 

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

+1

首先尝试让它在shell中工作。那么从一种语言翻译成另一种语言就很简单了。这里提供了一个Google搜索的提示:“点符号”。 –

+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运营商需要开始一个美元符号不是符号。

此外,你说你想要查询返回值低于比给定的值,在这种情况下,你可能希望$ lt不是$ gt。

0

您不能直接在查询中使用数组对象的值。您可以使用Mongo的aggregate框架。 Java文档对于骨料here