mongodb 创建LBS位置索引
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.2.2</version>
</dependency> <dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency> package com.teewoo.mongodb; import com.mongodb.BasicDBObject;
import com.mongodb.BasicDBObjectBuilder;
import com.mongodb.MongoClient;
import com.mongodb.ServerAddress;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import org.apache.commons.lang3.StringUtils;
import org.bson.Document;
import org.bson.types.ObjectId; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; /**
* mongoDB 基本操作
*
* @author xiaojf 2016-6-24 15:55:56
*/
public class MongoBaseOps {
private static MongoClient client; //mongo客户端
static {
client = new MongoClient(Arrays.asList(new ServerAddress("localhost", 27017)));
} /**
* 根据db名称获取db对象
*
* @param name db名称
* @return db对象
* @author xiaojf 2016-6-24 16:27:56
*/
public static MongoDatabase getDbByName(String name) {
MongoDatabase mongoDatabase = client.getDatabase(name);
return mongoDatabase;
} /**
* 根据mongo db名称和mongo collection 名称获取mongo collection对象
*
* @param dbName mongo db名称
* @param collectionName mongo collection 名称
* @return mongo collection对象
* @author xiaojf 2016-6-24 16:36:39
*/
public static MongoCollection getCollectionByName(String dbName,String collectionName){
MongoCollection<Document> mongoCollection = getDbByName(dbName).getCollection(collectionName); return mongoCollection;
} /**
* 新增文档
*
* @param dbName mongo db 名称
* @param collectionName mongo collection 名称
* @param document 文档
* @author xiaojf 2016-6-24 16:36:39
*/
public static void insertDoc(String dbName,String collectionName,Document document){
MongoCollection mongoCollection = getCollectionByName(dbName, collectionName); mongoCollection.insertOne(document);
} /**
* 批量新增文档
*
* @param dbName mongo db 名称
* @param collectionName mongo collection 名称
* @param documents 文档集合
* @author xiaojf 2016-6-24 16:36:39
*/
public static void batchInsertDoc(String dbName, String collectionName, List documents){
MongoCollection mongoCollection = getCollectionByName(dbName, collectionName); mongoCollection.insertMany(documents);
} /**
* 根据id删除文档
*
* @param dbName mongo db 名称
* @param collectionName mongo collection 名称
* @param id mongo document _id
* @author xiaojf 2016-6-24 17:07:16
*/
public static void deleteById(String dbName, String collectionName,String id){
if (StringUtils.isBlank(dbName) || StringUtils.isBlank(collectionName) || StringUtils.isBlank(id)) {
return ;
}
MongoCollection mongoCollection = getCollectionByName(dbName, collectionName);
mongoCollection.deleteOne(new BasicDBObject("_id", new ObjectId(id)));
} /**
* 根据id获取文档
*
* @param dbName mongo db 名称
* @param collectionName mongo collection 名称
* @param id mongo document _id
* @author xiaojf 2016-6-24 17:07:16
*/
public static Object getById(String dbName, String collectionName,String id){
if (StringUtils.isBlank(dbName) || StringUtils.isBlank(collectionName) || StringUtils.isBlank(id)) {
return null;
} MongoCollection mongoCollection = getCollectionByName(dbName, collectionName);
FindIterable findIterable = mongoCollection.find(new BasicDBObject("_id", new ObjectId(id)));
MongoCursor cursor = findIterable.iterator(); while (cursor.hasNext()) {
return cursor.next();
} return null;
} /**
* 创建索引
*
* @param dbName mongo db 名称
* @param collectionName mongo collection 名称
* @param fieldName 字段名称
* @param indexType 索引类型
* @author xiaojf 2016-6-27 13:43:02
*/
public static void createIndex(String dbName, String collectionName,String fieldName,String indexType){
MongoCollection mongoCollection = getCollectionByName(dbName, collectionName);
mongoCollection.createIndex(new BasicDBObject(fieldName, indexType));
} public static void main(String[] args) {
//获取 mongodb db对象
MongoDatabase mongoDatabase = MongoBaseOps.getDbByName("db_test");
//删除旧mongodb collection
mongoDatabase.getCollection("collect_gps").drop(); List<Document> documentList = new ArrayList<Document>();
for (int i = 0 ;i<100;i++) {
//构建2d索引的LBS document
Document doc = new Document();
doc.put("gps", BasicDBObjectBuilder.start().add("lon", 33+i).add("lat", i-33).get());
documentList.add(doc);
}
//批量新增文档给
MongoBaseOps.batchInsertDoc("db_test","collect_gps",documentList);
//创建2d索引
MongoBaseOps.createIndex("db_test","collect_gps","gps","2d");
}
}
mongodb 创建LBS位置索引的更多相关文章
- 关于mongodb创建索引的一些经验总结(转)
查看语句执行计划: explain() 在mongodb3+版本后输出格式发生改变: 详情参见:https://docs.mongodb.com/v3.0/reference/method/curso ...
- linux环境给mongodb创建索引
首先我们来了解索引,如果有基础的可以直接看最后面的操作. 可参照 DoNotStop 的CSDN 博客 ,全文地址请点击: https://blog.csdn.net/u013725455/artic ...
- MongoDB 创建索引的语法
1.为普通字段添加索引,并且为索引命名 db.集合名.createIndex( {"字段名": 1 },{"name":'idx_字段名'}) 说明: (1)索 ...
- 深入浅出Symfony2 - 结合MongoDB开发LBS应用
简介 随着近几年各类移动终端的迅速普及,基于地理位置的服务(LBS)和相关应用也越来越多,而支撑这些应用的最基础技术之一,就是基于地理位置信息的处理.我所在的项目也正从事相关系统的开发,我们使用的是S ...
- 结合MongoDB开发LBS应用
然后列举一下需求:1.实时性要高,有频繁的更新和读取2.可按距离排序支持分页3.支持多条件筛选(一个经纬度数据还包含其他属性,比如社交系统的性别.年龄) 方案简单介绍:1.sphinx geo索引支持 ...
- 【mongoDB中级篇②】索引与expain
索引的操作 数据库百分之八十的工作基本上都是查询,而索引能帮我们更快的查询到想要的数据.但是其降低了数据的写入速度,所以要权衡常用的查询字段,不必在太多字段上建立索引. 在mongoDB中默认是用bt ...
- 上mongodb创建一些吸取的经验教训指数
想来接触mongodb它已经快一年了,对于其指数已经积累了很多的经验,知识,以这个夜黑风高的优势,放mongodb总结一番吧. 一,索引介绍 mongodb具有两类索引,分别为单键索引和复合索引. 1 ...
- MongoDB系列四(索引).
一.索引简介 再来老生常谈一番,什么是索引呢?数据库索引与书籍的索引类似.有了索引就不需要翻整本书,数据库可以直接在索引中查找,在索引中找到条目以后,就可以直接跳转到目标文档的位置,这能使查找速度提高 ...
- mongoDB常见的查询索引(三)
1. _id索引 _id索引是绝大多数集合默认建立的索引 对于每个插入的数据,MongoDB会自动生成一条唯一的_id字段. 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
随机推荐
- donet体系结构
一.C#与.NET的关系 1.粗略地説,.net是一种在Windows平台上的编程架构----一种API.2.C#编译器专门用于.net,这表示用C#编写的所有代码总是使用.NET Framework ...
- python paramiko模块简介
一:简介 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 由于使用的是python这样的能够跨平台运行的语言,所以所有python支 ...
- Intellij Idea 用Maven 创建Hibernate 项目
第一步:创建maven项目 2. 3. 4.第三步保存之后进行下一步 到此点击finish maven项目创建成功,点击完成后会进行一系列jar包的下载 maven 仓库的默认存储位置 第二步:连接数 ...
- es6基础系列一:let和const
let 声明变量,可以说是具有作用域的var,用于声明变量,主要规则如下: 1 let声明的变量拥有块级作用域 { let i = 1; console.log(i); // 1 } console. ...
- 使用WebView监控网页加载状况,PerformanceMonitor,WebViewClient生命周期
原理:WebView加载Url完成后,注入js脚本,脚本代码使用W3C的PerformanceTimingAPI, 往js脚本传入一个Android对象(代码中为AndroidObject),在js脚 ...
- 文本处理sed常用操作
文本处理sed常用操作 linux sed (stream editor) is a Unix utility that parses and transforms text, using a sim ...
- SELECT中的多表连接
MySQL多表连接查询 连接(join):将一张表中的行按照某个条件(连接条件)和另一张表中的行连接起来形成一个新行的过程. 根据连接查询返回的结果,分3类: 内连接(inner join) 外连接( ...
- 让你的JS代码更具可读性
一.合理的添加注释 函数和方法--每个函数或方法都应该包含一个注释,描述其目的和用于完成任务所可能使用 的算法.陈述事先的假设也非常重要,如参数代表什么,函数是否有返回值(因为这不能从函 数定义中推断 ...
- java面试题—精选30道Java笔试题解答(一)
下面都是我自己的答案非官方,仅供参考,如果有疑问或错误请一定要提出来,大家一起进步啦~~~ 1. 下面哪些是Thread类的方法() A start() B run() C exit() D getP ...
- Android 正则表达式验证手机号、姓名(包含少数民族)、身份证号
最近项目中新增的功能,需要对手机号.姓名.身份证号等一些信息进行验证,最好的方法是通过正则表达式来验证,网上查了一些资料,写了这几个工具方法. 1.验证手机号 规则:第一位只能是1,第二位为3-8中的 ...