背景:
最近开始做mongoDB,公司原有的mysql数据库需要在短期内转库为mongoDB,在重构代码过程中,旧有的一些业务逻辑就需要改动了。比较棘手的,就是地理位置数据做排序,这一点上,我打算用mongoDB的geoNear经纬度查询功能来实现。
经过:
在mongoDB中,我写了一段nosql,可以按输入的定点位置以经纬度排序:
db.getCollection("projectInternalUseData").aggregate({
$geoNear: {
near: [100.0, 50.0],
distanceField: "calculated",
spherical: true
}
})
上诉代码能正常运行,需要几个条件:
1. projectInternalUseData集合必须有一个 2d 经纬索引
2.该索引的字段,必须存放一个数组作为坐标:[ x , y ]
建立索引语句如下:
db.getCollection("projectInternalUseData").createIndex({ "trueCoordinates" , "2dsphere" });
旧版本(3.4以下)是用 ensureIndex 函数的
经过上述测试,nosql查询无误,数据没问题,下一步,在java中实现查询