次のクエリがあります。
db.listener.aggregate(
[
{ "$match" : { "location.countryName" : "Italy" } },
{ "$project" : { "location" : "$location"} },
{ "$group" : { "_id" : { "country": "$location.countryName", "city": "$location.cityName" }, "count" : { "$sum" : 1 }, "co-ords" : { "$addToSet" : { "lat" : "$location.latitude", "long" : "$location.longitude" } } } },
{ "$group" : { "_id" : "$_id.country", "cities" : { "$push" : { "city" : "$_id.city", "count" : "$count", "co-ords" : "$co-ords" } } } },
{ "$sort" : { "_id" : 1 } },
]
)
次の結果が得られます (切り捨てられます)。
{
"result" : [
{
"_id" : "Italy",
"cities" : [
{
"city" : "Seriate",
"count" : 1,
"co-ords" : [
{
"lat" : "45.6833",
"long" : "9.7167"
}
]
},
{
"city" : "Milan",
"count" : 3,
"co-ords" : [
{
"lat" : "45.4612",
"long" : "9.1878"
},
{
"lat" : "45.4667",
"long" : "9.2"
}
]
},
ミラノ市の例でわかるように、合計都市数は 3 ですが、経度/緯度セットの数は 2 です。つまり、より正確な場所の 1 つには 2 つのインスタンスがあり、もう 1 つの場所には 1 つのインスタンスがあります。ここで、緯度/経度ごとのインスタンス数と全体の数を反映するようにクエリを修正する必要があります。次のようになります。
{
"city" : "Milan",
"count" : 3,
"co-ords" : [
{
"lat" : "45.4612",
"long" : "9.1878",
"total" : 2
},
{
"lat" : "45.4667",
"long" : "9.2",
"total" : 1
}
]
},
これを達成するためにいくつかのことを試しましたが、思い通りにならないか、Mongo がエラーをスローします。これを行う最良の方法を知っている人はいますか?
どうもありがとう、
ニック。