0

したがって、mongo データベースにはいくつかの dbobjects があります。オブジェクトの 1 つの例を次に示します。

{ "_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));

元のクエリには 2 つの問題があったことに注意してください。

1) 参照する必要がありますcurrentWeather.0.temp_C 。2)gt演算子は、アンパサンドではなくドル記号で始める必要があります。

また、クエリが特定の値よりも低い値を返すようにしたいとおっしゃいました。この場合、おそらく $gt ではなく $lt が必要です。

于 2013-10-23T14:45:32.983 に答える
0

クエリで配列のオブジェクトの値を直接使用することはできません。Mongoの集約フレームワークを利用できます。アグリゲートのJavaドキュメントはこちら

于 2013-10-19T08:27:38.820 に答える