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 ...
随机推荐
- umi学习记录
菜单路由: 方法1:在config中配置全部路由,由后台返的的菜单进行匹配 方法2:动态注册路由和添加菜单--目前仅尝试了umi@2 的版本 原理:使用umi的运行时配置patchRoutes和ren ...
- USACO2023Feb游记
由于学校要求,过来打 USACO. 由于上次已经打到白金了,所以继续. 然后还是 AK 了. 感觉题意很迷惑,所以都翻译一下. Hungry Cow Bessie 很饿,每天晚饭如果有干草就会吃 \( ...
- SOJ1728 题解
题意 有一个长度为 \(n\) 的数列 \(a_0,a_1,\dots,a_{n-1}\) 以及一个长度为 \(m\) 的操作序列 \((b_0,c_0),(b_1,c_1)\dots(b_{m-1} ...
- linux 操作命令大全
mysql 授权远程访问 1.进入cd /usr/local/mysql/bin 下执行 ./mysql -uroot -pInfosec@2020 (-p后面是数据库密码) 2.use mysql ...
- Appium的触屏操作&设备交互api
Appium的触屏操作 TouchAction---Appium 2.0以上不在可以使用 官网地址:https://github.com/appium/appium/blob/master/docs/ ...
- 面向对象程序设计第三次blog
一.前言 第六次题目集总结-- 题量:较少 难度:较高 知识点: 判断输入内容 提取输入的有效信息并进行计算 总结:题目比较难,题量较少. 第七次题目集总结-- 题量:较少 难度:一般 知识点: 输入 ...
- reportviewer的简单使用
以下通过VS提供的工具来绑定数据源,没有一句自己写的代码. 1.新建web窗体,拖入ScriptManager控件,ReportViewer控件. 2.添加报表,新建数据集.在报表设计页面上拖入控件设 ...
- vue框架回顾
- 四大组件之服务Service
参考:Android开发基础之服务Service 什么是服务呢? 用俗话话应该是长期于后台运行的程序,如果是官方一点,首先它是一个组件,用于执行长期运行的任务,并且与用户没有交互. 每一个服务都需要在 ...
- PHP 网页 apache24+php8 yii basic
PHP官网下载 https://windows.php.net/download/ 在PHP官网点击Download下载时不管选择哪个版本的都有两个类型 : Non Thread Safe(非线程安全 ...