2013-10-14 52 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