springBoot中对mongodb添加2dsphere位置索引
项目需求:最近有个需求,就是要根据坐标位置找出附近的车辆(车辆有对应的坐标)。然后翻了翻百度,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位置索引的更多相关文章
- mongodb 创建LBS位置索引
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver< ...
- SpringBoot(四)SpringBoot中lombok使用
lombok概述 lombok简介 Lombok想要解决了的是在我们实体Bean中大量的Getter/Setter方法,以及toString, hashCode等可能不会用到,但是某些时候仍然需要复写 ...
- mongodb基本操作和在springboot中的使用
本文介绍mongodb的使用 说明 起步 mongo通用类型 mongoshell的操作 CRUD操作 shell命令操作 索引操作 mongo在springboot中的使用 目录结构 依赖 prop ...
- SpringBoot学习笔记(10)-----SpringBoot中使用Redis/Mongodb和缓存Ehcache缓存和redis缓存
1. 使用Redis 在使用redis之前,首先要保证安装或有redis的服务器,接下就是引入redis依赖. pom.xml文件如下 <dependency> <groupId&g ...
- postman上传excel,java后台读取excel生成到指定位置进行备份,并且把excel中的数据添加到数据库
最近要做个前端网页上传excel,数据直接添加到数据库的功能..在此写个读取excel的demo. 首先新建springboot的web项目 导包,读取excel可以用poi也可以用jxl,这里本文用 ...
- mongodb添加索引
mongodb可以添加多列索引 稠密索引:该列中即使有null值也能给你查出来 稀疏索引:该列中查不出包含null值的列 二叉树索引是由码放的顺序的,哈希则是散列,相邻的数字,排列顺序并不一定紧邻
- SpringBoot中Service实现类添加@Service却任然无法注入的问题
最近一直在研究Spring Boot.从GitHub上下载了一个my-Blog源码,一边看,一边自己尝试去实现,结果掉在坑了,研究了近一周才爬出来,特地来这博客园记录下来,一是避免自己在放这样的错误, ...
- C# MongoDB添加索引
场景: 在最近的项目中,用到了Mongodb,用它来保存大量工业数据.同时是会根据用户自动建立对应的数据表.这要求同时建立索引来加快查询. 解决: 1.在Nuget包中查询"mongocsh ...
- mongoose中给字段添加索引的方法
mongoose中给字段添加索引的方法有两种,一种通过在定义schema的时候配置,如: var animalSchema = new Schema({ name: String, type: Str ...
- 如何把web.xml中的context-param、Servlet、Listener和Filter定义添加到SpringBoot中
把传统的web项目迁移到SpringBoot中,少不了web.xml中的context-param.Servlet.Filter和Listener等定义的迁移. 对于Servlet.Filter和Li ...
随机推荐
- Qt中的多窗体编程(续一)
在前面一节中,已经把所有需要的窗体都创建好了,下面将依次实现预设的功能. 一.实现点击菜单打开模式子窗体的功能. 1.在编辑模式下双击Forms下的"mainWindow.ui", ...
- Mysql数据库基础第六章:变量、存储过程与函数
Mysql数据库基础系列 软件下载地址 提取码:7v7u 数据下载地址 提取码:e6p9 mysql数据库基础第一章:(一)数据库基本概念 mysql数据库基础第一章:(二)mysql环境搭建 mys ...
- 06 RDD编程
总共有多少学生?map(), distinct(), count() 开设了多少门课程? 每个学生选修了多少门课?map(), countByKey() 每门课程有多少个学生选?map(), coun ...
- BDD测试和TDD测试
BDD测试和TDD测试 TDD TDD是测试驱动开发(Test-Driven Development)的缩写,是敏捷开发中的一项测试技术,也是一种设计方法论.她的大概思路是:先针对每个功能点抽象出接口 ...
- mybatis读取blob类型
mybatis 读取blob数据 mybatis读取blob数据过程: 1.从数据库中读出blob数据类型,用pojo中的byte[]接收. 2.把文件保存成文件(或者变成base64也行). Cus ...
- flask-基础篇03 请求钩子与上下文
一.异常处理 1.HTTP 异常主动抛出 ①abort 方法: 抛出一个给定状态代码的 HTTPException 或者 指定响应,例如想要用一个页面未找到页面未找到异常来终止请求,你可以调用 abo ...
- lucene入门&Solr
LUCENE 1. 学习计划 1.案例分析:什么是全文检索,如何实现全文检索 2.Lucene实现全文检索的流程 a) 创建索引 b) 查询索引 3.配置开发环境 4.创建索引库 5.查询索引库 6. ...
- win10系统每次重启桌面图标排列都会改动怎么办
鼠标右键点击个性化>主题>找到桌面图标设置>把计算机 回收站 用户的文件 控制面板 网络等前面框复选框全部勾选掉,然后在桌面新建文件夹把桌面所有的图标剪切到新建文件里面,然后把新建文 ...
- Flink1.11 解决 No ExecutorFactory found to execute the application
在使用Flink1.11的时候写了个本地Test 运行的时候发现报错了,具体如下 Exception in thread "main" java.lang.IllegalState ...
- ES5 绑定 this 的方法
this的动态切换,固然为 JavaScript 创造了巨大的灵活性,但也使得编程变得困难和模糊.有时,需要把this固定下来,避免出现意想不到的情况.JavaScript 提供了call.apply ...