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");
    }
}
时间: 2024-12-23 08:43:13

mongodb 创建LBS位置索引的相关文章

关于mongodb创建索引的一些经验总结

想来接触mongodb已经快一年了,对于它的索引知识也积攒了不少经验,趁着这个月黑风高的夜晚,就把mongodb的索引总结一番吧. 一,索引介绍 mongodb具有两类索引,分别为单键索引和复合索引. 1.单键索引是最简单的一种索引,创建单键索引的开销要比复合索引小很多.单键索引主要用于针对单值查询的条件. 2.复合索引是将文档中的几个键联合起来创建的一种索引,创建这种索引需要更多的空间与性能开销.分别体现在: 1).在给大量数据创建复合索引时,会阻塞数据库的查询,更不用说修改和插入操作了: 2

mongoDB常见的查询索引(三)

1. _id索引 _id索引是绝大多数集合默认建立的索引 对于每个插入的数据,MongoDB会自动生成一条唯一的_id字段. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 > db.jerome_2.collection.insert({x:2}) WriteResult({ "nInserted" : 1 }) > db.jerome_2.collection.getIndexes() [     {         "v&quo

结合MongoDB开发LBS应用

?简介 随着近几年各类移动终端的迅速普及,基于地理位置的服务(LBS)和相关应用也越来越多,而支撑这些应用的最基础技术之一,就是基于地理位置信息的处理.我所在的项目也正从事相关系统的开发,我们使用的是Symfony2+Doctrine2 ODM+MongoDB的组合. 我们将这些技术要点整理成文,希望能够通过本文的介绍和案例,详细解释如何使用MongoDB进行地理位置信息的查询和处理.在文章的开头,我们也会先介绍一下业界通常用来处理地理位置信息的一些方案并进行比较,让读者逐步了解使用MongoD

深入浅出Symfony2 - 结合MongoDB开发LBS应用

简介 随着近几年各类移动终端的迅速普及,基于地理位置的服务(LBS)和相关应用也越来越多,而支撑这些应用的最基础技术之一,就是基于地理位置信息的处理.我所在的项目也正从事相关系统的开发,我们使用的是Symfony2+Doctrine2 ODM+MongoDB的组合. 我们将这些技术要点整理成文,希望能够通过本文的介绍和案例,详细解释如何使用MongoDB进行地理位置信息的查询和处理.在文章的开头,我们也会先介绍一下业界通常用来处理地理位置信息的一些方案并进行比较,让读者逐步了解使用MongoDB

mongodb学习笔记之索引(转)

一.索引基础:    MongoDB的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的优化技巧.下面是创建索引的命令:    > db.test.ensureIndex({"username":1})    可以通过下面的名称查看索引是否已经成功建立:    > db.test.getIndexes()    删除索引的命令是:    > db.test.dropIndex({"username":1})    在MongoDB中,我们

高性能MySql阅读笔记第五章--创建高性能的索引1

创建高性能的索引1 索引是存储引擎用于快速找到记录的一种数据结构,这是索引的基本功能. 索引对于良好的性能非常重要. 索引优化应该是对查询性能优化最有效的手段了,索引能够轻易将查询性能提高几个数量级,“最优”的索引有时比一个“好的”索引性能好两个数量级,创建一个真正“最优”的索引经常需要重写查询. 一.索引的类型 1.B树索引 当人们谈论索引的时候,如果没有特别指明类型,那么多半说的是B树索引,他使用B树数据结构存储数据. 可以使用B树索引的查询类型:全值匹配.匹配最左前缀.匹配列前缀.匹配范围

mongoDB高级查询与索引

整理来自 https://www.shiyanlou.com/courses/running/78 覆盖索引查询 所有的查询字段都是索引的一部分:所有的查询返回字段在同一个索引中. 由于索引存在于RAM中,因而从索引中获取数据要比扫面文档更快 范例:创建如下users集合(使用前面所学的方法创建该集合): { "contact": "987654321", "dob": "01-01-1991", "gender&q

创建高性能的索引

索引可以包含一个或多个列的值.若索引包含多个列,那么列的顺序也十分重要,因为MySQL只能高效的使用索引的最左前缀列. 在MySQL中,索引是在存储引擎层而不是服务层实现的,所以并没有统一的索引标准.不同存储引擎的索引的工作方式并不一样,也不是所有的存储引擎都支持所有类型的索引.即使多个存储引擎支持同一种类型的索引,其底层的实现也可能不同. B-Tree索引 若没有指定特定类型的索引,则一般都是指的是B-Tree索引,它使用B-Tree数据结构来存储数据.InnoDB使用的是B+Tree.MyI

mysql索引类型以及如何创建高性能的索引

B-tree       ---默认的索引类型 存储引擎会以不同的方式使用B-tree索引,性能也不一样.myisam使用前缀压缩技术,是索引更小,通过数据的物理位置引用索引的行.InnoDB按照原数据格式进行存储,根据主键引用索引的行. 2.B+tree        --- 3.哈希索引        --只有memory引擎支持.无法排序. 4.R-tree 5.全文索引 mysql索引类型以及如何创建高性能的索引,布布扣,bubuko.com