springBoot中对mongodb添加2dsphere位置索引
2024-09-08 17:59:30
项目需求:最近有个需求,就是要根据坐标位置找出附近的车辆(车辆有对应的坐标)。然后翻了翻百度,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位置索引类型
加上索引之后,成功的找到了对应范围内的车辆。
最新文章
- XSS
- Python学习--03变量类型
- Asp.Net Core 简单的使用加密的Cookie保存用户状态
- Effective java读书笔记
- design pattern
- 接微软技术(c#,.net,vb.net, asp.net, sql server, bi, dw etc)项目
- 用mysql触发器实现log记录
- jQuery – 6.选择器
- HDOJ并查集题目 HDOJ 1213 HDOJ 1242
- [Stanford 2011] Views 知识点
- Android_安装GooglePlay
- Method Swizzling 和 AOP 实践(转)
- servlet之过滤器(转载)
- linux下iconv()函数的用法(转载并修改)
- Django中url的生成过程详解
- 安装CentOs 7.3
- JDBCUtils相关
- 7.2.4 else与if配对
- [转]iptables 命令介绍
- C#中.XSD是什么文件?