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 ...
随机推荐
- Spring aop切面插入事物回滚
<!-- tx标签配置 事物--> <tx:advice id="txadvice" transaction-manager="transactionM ...
- Linux--管道pipe
管道是一种最基本的IPC机制,由pipe函数创建:#include <unistd.h> int pipe(int filedes[2]); 调用pipe函数时在内核中开辟一块缓冲区(称为 ...
- Cocos2d-x性能分析-Android版本之Gprof
在 iOS 平台下我们可以用 Xcode 自带的 Profile 工具来测试我们程序的性能,Android 平台使用的 gprof 这里整理了一下具体的cocos2dx 使用gprof进行性能分析的具 ...
- 复选框选中删除行(DOM练习)
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- vue2.0仿今日头条开源项目
vue-toutiao 这是用 vue.js 2.0 高仿 今日头条 的移动端项目,结合了原生app的部分功能以及网页版. 前言 本人是 今日头条 的重度用户,在学习vue.js过程中,在GitHub ...
- centos7 下nfs的配置
td p { margin-bottom: 0cm } p { margin-bottom: 0.25cm; line-height: 120% } a:link { } 补充知识: RPC 主程序: ...
- java运算符 与(&)、非(~)、或(|)、异或(^)
最近看HashMap源码,遇到了这样一段代码: static final int hash(Object key) { int h; return (key == null) ? 0 : (h = k ...
- 架构设计之Spring-Session分布式集群会话管理
前言 通常在web开发中,回话管理是很重要的一部分,用于存储与用户相关的一些数据.对于JAVA开发者来说,项目中的session一般由Tomcat或者jetty容器来管理. 特点介绍 尽管使用特定的容 ...
- Python 面向对象之一
Python 面向对象之 类与属性 今天接触了一下面向对象,发现面向对象和之前理解的简直就是天壤之别,在学Linux的时候,一切皆文件,现在学面向对象了,so,一切皆对象. 之前不是一直在学的用面向函 ...
- 转-Tomcat 8 安装和配置、优化
https://github.com/judasn/Linux-Tutorial/blob/master/Tomcat-Install-And-Settings.md Tomcat 8 安装 Tomc ...