项目需求:最近有个需求,就是要根据坐标位置找出附近的车辆(车辆有对应的坐标)。然后翻了翻百度,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位置索引类型

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

springBoot中对mongodb添加2dsphere位置索引的更多相关文章

  1. mongodb 创建LBS位置索引

    <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver< ...

  2. SpringBoot(四)SpringBoot中lombok使用

    lombok概述 lombok简介 Lombok想要解决了的是在我们实体Bean中大量的Getter/Setter方法,以及toString, hashCode等可能不会用到,但是某些时候仍然需要复写 ...

  3. mongodb基本操作和在springboot中的使用

    本文介绍mongodb的使用 说明 起步 mongo通用类型 mongoshell的操作 CRUD操作 shell命令操作 索引操作 mongo在springboot中的使用 目录结构 依赖 prop ...

  4. SpringBoot学习笔记(10)-----SpringBoot中使用Redis/Mongodb和缓存Ehcache缓存和redis缓存

    1. 使用Redis 在使用redis之前,首先要保证安装或有redis的服务器,接下就是引入redis依赖. pom.xml文件如下 <dependency> <groupId&g ...

  5. postman上传excel,java后台读取excel生成到指定位置进行备份,并且把excel中的数据添加到数据库

    最近要做个前端网页上传excel,数据直接添加到数据库的功能..在此写个读取excel的demo. 首先新建springboot的web项目 导包,读取excel可以用poi也可以用jxl,这里本文用 ...

  6. mongodb添加索引

    mongodb可以添加多列索引 稠密索引:该列中即使有null值也能给你查出来 稀疏索引:该列中查不出包含null值的列 二叉树索引是由码放的顺序的,哈希则是散列,相邻的数字,排列顺序并不一定紧邻

  7. SpringBoot中Service实现类添加@Service却任然无法注入的问题

    最近一直在研究Spring Boot.从GitHub上下载了一个my-Blog源码,一边看,一边自己尝试去实现,结果掉在坑了,研究了近一周才爬出来,特地来这博客园记录下来,一是避免自己在放这样的错误, ...

  8. C# MongoDB添加索引

    场景: 在最近的项目中,用到了Mongodb,用它来保存大量工业数据.同时是会根据用户自动建立对应的数据表.这要求同时建立索引来加快查询. 解决: 1.在Nuget包中查询"mongocsh ...

  9. mongoose中给字段添加索引的方法

    mongoose中给字段添加索引的方法有两种,一种通过在定义schema的时候配置,如: var animalSchema = new Schema({ name: String, type: Str ...

  10. 如何把web.xml中的context-param、Servlet、Listener和Filter定义添加到SpringBoot中

    把传统的web项目迁移到SpringBoot中,少不了web.xml中的context-param.Servlet.Filter和Listener等定义的迁移. 对于Servlet.Filter和Li ...

随机推荐

  1. web实践学习3

    web实践学习3 20201303张奕博 2023.1.26 创建树 从预览动图和页面可以看到,浮岛上共有两种树 ,绿色的高树和粉红色的矮树,树的实现也非常简单,是使用了两个 BoxBufferGeo ...

  2. 难搞的electron之安装

    做了几个electron项目,感觉最难搞的地方竟然是安装!这怎么能忍!经过几天试错,把自己能够顺利安装的流程记录下来,仅供参考. 使用框架为quasar+vue+quasar_electron qua ...

  3. java原生生成验证码

    @WebServlet("/code") public class VerifyCodeUtils extends HttpServlet { @Override protecte ...

  4. Delete `␍` prettier/prettier Vue 可悬浮按钮

    Delete `␍` prettier/prettier 代码格式化不一致,换行符冲突.UNIX/Linux 使用的是 0x0A(LF), DOS/Windows 一直使用 0x0D0A(CRLF) ...

  5. Docker之Redis保姆级别安装

    Docker之Redis保姆级别安装: 如果觉得样式不好:跳转即可 http://www.lifengying.site/(md文件复制过来有些样式会不一样) 学英语网站项目:自己先保证Redis.N ...

  6. 32位机转化11位手机号以及BLE与USB的切换

    目录 用现有的资源,去实现本应该用更多资源来实现的需求,是一件很有意思的事情.不是说提倡这样使用,而是换一种思路解决问题比较新奇,或是在很多限制既定的情况下可以应急. 比如说,582m芯片,默认用32 ...

  7. TensorFlow学习报告

    TensorFlow简介 是一个基于计算图的深度学习库,具有更广泛的应用领域.良好的多语言支持.部署性能等优点,时现今最广泛使用的深度学习框架. 计算图Session Tensor 1 import ...

  8. page-break-after:always 打印分页

    在实现打印功能时候,可以完整分页,需要配合二维数组来使用,避免下一页数据展示到上一页

  9. deepinlinux安装golang

    Download 从 Google 官方获取安装包,不用FQ直接访问 http://golang.google.cn,选择 Linux 的安装包如 go1.14.linux-amd64.tar.gz ...

  10. [2002年NOIP普及组] 选数

    已知 n 个整数 x1,x2,-,xn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加,可分别得到一系列的和.例如当 n=4,k=3,4 个整数分别为 3,7,12,19 时, ...