mongodb的ensureIndex无法正常工作

时间:2013-10-07 08:36:25

标签: mongodb geospatial

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-index/所述:

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

如果我按照以下方式查询 user 集合,我会得到一个空数组

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
    ]
}, 
    ...
]

你知道可能出现什么问题吗?

0 个答案:

没有答案