0

所以我的 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来做到这一点。

4

2 回答 2

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。

于 2013-10-23T14:45:32.983 回答
0

您不能在查询中直接使用数组对象的值。您可以使用Mongo 的聚合框架。聚合的 Java 文档在这里

于 2013-10-19T08:27:38.820 回答