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