1

mongodb バージョン: osx-x86_64-2.4.5

次の形式の位置情報データを持つユーザーのコレクションがあります。

[
    {
        "_id" : "24128f74-3e47-4f02-8188-37779f3eca3c",
        "geolocation" : {
            "lat" : 55.5884705,
            "lng" : 13.0111425
        }
    },
    {
        "_id" : "65db4271-8eff-4619-95fb-08135cbccb8f",
        "geolocation" : {
            "lat" : 55.58934530000001,
            "lng" : 13.0066488
        },
        "email" : "stephan3@stephan3.com"
    },
    {
        "_id" : "74d17da5-af4c-4386-9efa-9817f11b64f9",
        "geolocation" : {
            "lat" : 55.58934530000001,
            "lng" : 13.0066488
        }
    },
    {
        "_id" : "d0378d09-1f69-4e01-8602-b4805466a029",
        "geolocation" : {
            "lat" : 55.590957,
            "lng" : 13.001412
        }
    }
]

本番データを移行したくないので、ここに記載されているように、 $geoWithinなどの地理空間クエリを使用できるようにインデックスを作成しましたhttp://docs.mongodb.org/manual/tutorial/build-a-2dsphere-インデックス/ :

db.user.ensureIndex({ geolocation : '2d'})

次のようにユーザーコレクションをクエリすると、空の配列が返されます

db.user.find({ geolocation: {
   $geoWithin : {
      $center : [ [ 13.0111425,55.5884705 ], 1 ]
   }
}});

これはユーザー 24128f74-3e47-4f02-8188-37779f3eca3c の正確な場所であるため、少なくとも彼女は返されるはずです。

ユーザーの地理位置情報プロパティを [ long, lat ] 形式に変換すると、ユーザー エントリは次のようになり、同じクエリを再度適用すると、すべてのユーザーが取得され、遠くにいるユーザーも取得されます。

[
{
    "_id" : "24128f74-3e47-4f02-8188-37779f3eca3c",
    "geolocation" : [
        13.0111425,
        55.5884705
    ]
}, 
    ...
]

何がうまくいかないのか考えていますか?

4

0 に答える 0