项目需求:最近有个需求,就是要根据坐标位置找出附近的车辆(车辆有对应的坐标)。然后翻了翻百度,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. 使用elasticsearch-head修改一个索引的副本数

    一.背景 有一个很久以前设置的无副本索引放入了ES集群中,为了提升该索引的稳定性,需要添加一个副本 尝试curl方法失败以及因为es版本太旧(低于5.0.0)用不了kibana,并且用Python修改 ...

  2. 洛谷 P6021 洪水

    题意 给定一棵有 \(n\) 个结点的树,点有点权:一共有 \(m\) 次操作,每次操作包括以下两种: 在一个点的子树中删去一些结点,使得该子树中所有叶结点与该子树的根结点不连通,并且使删去的点的点权 ...

  3. windows自带xbox game bar如何更改录制视频保存位置

      若要更改保存游戏剪辑的位置,请使用文件资源管理器根据需要将"捕获"文件夹移动到电脑上的任意位置. Windows 会将游戏剪辑和屏幕截图保存在该文件夹中(无论移动到哪里).   ...

  4. js获取的 后端的列表。

    1.引号被转码 处理办法 {% autoescape off %} var tmp = '{{ data1 }}'; var tmp = '{{ data2 }}'; {% endautoescape ...

  5. springboot中实现逆向工程

    如果这篇文章能给你带来帮助 不胜荣幸,如果有不同的意见也欢迎批评指正,废话不多说直接上代码.(参考文档:https://www.cnblogs.com/kibana/p/8930248.html) 第 ...

  6. Java中Set里remove详解

    例如 1 HashSet set = new HashSet(); 2 Person p1 = new Person(1001,"AA"); 3 Person p2 = new P ...

  7. 安全测试-WEB安全渗透测试基础知识(二)

    1.2. 计算机网络 1.2.1. 计算机通信网的组成 计算机网络由通信子网和资源子网组成. 其中通信子网负责数据的无差错和有序传递,其处理功能包括差错控制.流量控制.路由选择.网络互连等. 其中资源 ...

  8. 性能测试工具locust压测介绍

    官方文档:https://docs.locust.io/en/stable/index.html 1.初识locust Locust 完全基本 Python 编程语言,采用python 编写压测脚本, ...

  9. HCIP-进阶实验06-多实例生成树安全部署

    HCIP-ICT进阶实验06-多实例生成树安全部署 1 实验需求 1.1 实验拓扑 1.2 实验环境说明 IP地址规划表: 设备 接口 IP 地址 备注 SW1 VLANIF10 192.168.10 ...

  10. CentOS 7 忘记root密码的解决方法

    这是自己忘记密码root密码第二次了,可以再一再二但是不能再三.因此在此记录在网上找的 如何更换root密码的方法. (这篇文章是参考https://blog.csdn.net/q290994/art ...