项目需求:最近有个需求,就是要根据坐标位置找出附近的车辆(车辆有对应的坐标)。然后翻了翻百度,cv流一顿操作之后,大概整理出来了一段代码如下

 
//根据当前位置坐标,找出附近*米内的所有车辆
BasicDBObject basicDBObject = new BasicDBObject("location",
new BasicDBObject("$nearSphere",
new BasicDBObject("type", "Point").
append("coordinates", new double[]{113.348804,23.162084}))
.append("$maxDistance", 400));
Query query = new BasicQuery(String.valueOf(basicDBObject));
List<CarInfo> carInfos = mongoTemplate.find(query, CarInfo.class, "carInfo");
carInfos.forEach(System.err::print);

部分解释如下:
new double[]{113.348804,23.162084}:存放的一个double数组,为用户的坐标位置经纬度。
400:最大的范围,找出所有在上述坐标400米范围内的车辆。

location:你用来存放车辆经纬度的字段(也是double数组格式存放)

CarInfo.class: 我项目中定义的实体类

carInfo: 我存放在mongodb中的集合名称

将上述代码放到测试里边执行之后,老是报异常:unable to find index for $geoNear query' on server localhost:27017

百度后大概知道,是因为没有给location字段添加位置索引的缘故。

因为我这个操作比较特殊,我每次会先删除集合,然后再创建集合。所以就会导致直接在mongodb手动添加的索引被删除,所以就需要在重新生成集合的时候用java代码给location字段添加一个位置索引。

查了一圈之后,并没有找到用java添加2dsphere索引的方法。

整个人很懵逼,测试了好几个小时之后,加上继续翻资料,终于找到了解决方案:如下

在插入完数据之后,添加以下代码:

MongoClient mongoClient = new MongoClient();
DBCollection test = mongoClient.getDB("test").getCollection("carInfo");
test.createIndex(new BasicDBObject("location","2dsphere"));

部分解释:
test:你的mongodb数据库名称
carInfo:你的集合名称
location:要添加索引的字段名称
2dsphere:mongodb位置索引类型

加上索引之后,成功的找到了对应范围内的车辆。

最新文章

  1. XSS
  2. Python学习--03变量类型
  3. Asp.Net Core 简单的使用加密的Cookie保存用户状态
  4. Effective java读书笔记
  5. design pattern
  6. 接微软技术(c#,.net,vb.net, asp.net, sql server, bi, dw etc)项目
  7. 用mysql触发器实现log记录
  8. jQuery – 6.选择器
  9. HDOJ并查集题目 HDOJ 1213 HDOJ 1242
  10. [Stanford 2011] Views 知识点
  11. Android_安装GooglePlay
  12. Method Swizzling 和 AOP 实践(转)
  13. servlet之过滤器(转载)
  14. linux下iconv()函数的用法(转载并修改)
  15. Django中url的生成过程详解
  16. 安装CentOs 7.3
  17. JDBCUtils相关
  18. 7.2.4 else与if配对
  19. [转]iptables 命令介绍
  20. C#中.XSD是什么文件?

热门文章

  1. 使用elasticsearch-head修改一个索引的副本数
  2. 【MySQL 服务器参数优化】
  3. element-ui动态表单验证
  4. Mybatis学习笔记【狂神说】
  5. python 链接云端数据库/远程数据库 可以使用原始Odbc
  6. 泛微OA技巧随记
  7. 粉色的猫MISC(bugku)
  8. 096_mulesoft with salesforce _01
  9. Mac安装Nvm Node开发环境
  10. .net core 添加省市区三级联动以及编辑时显示选中的城市。