MongoDB 创建地图索引及根据位置坐标查询地点小例子

来源:互联网 发布:女白色t恤淘宝店铺推荐 编辑:程序博客网 时间:2024/06/11 16:57

MongoDB 创建地图索引及根据位置坐标查询地点小例子

1:MongoDB 的安装

参照博客:http://www.cnblogs.com/sweetchildomine/p/6397136.html
可视化工具:本人用的是robomongo ,下载地址:https://robomongo.org/

2:创建地图索引:

db.shop.ensureIndex( { loc : "2dsphere" } )db.shop.ensureIndex( { loc : "2d" } ) 1.2D索引,用于存储和查找平面上的点。2.2Dsphere索引,用于存储和查找球面上的点。

3:spring-mongo的配置:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:context="http://www.springframework.org/schema/context"       xmlns:mongo="http://www.springframework.org/schema/data/mongo"       xsi:schemaLocation="http://www.springframework.org/schema/context          http://www.springframework.org/schema/context/spring-context-4.3.xsd          http://www.springframework.org/schema/data/mongo          http://www.springframework.org/schema/data/mongo/spring-mongo-1.10.2.xsd          http://www.springframework.org/schema/beans          http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">    <context:component-scan base-package="com.binxm.dao"></context:component-scan>    <!-- 加载mongodb的属性配置文件 -->    <context:property-placeholder location="classpath:properties/mongodb.properties" />    <!-- mongo对象 -->    <mongo:mongo-client id="mongo" replica-set="${mongo.hostport}">        <mongo:client-options connections-per-host="${mongo.connectionsPerHost}"                              threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}"                              connect-timeout="${mongo.connectTimeout}"                              max-wait-time="${mongo.maxWaitTime}"                              socket-keep-alive="${mongo.socketKeepAlive}"                              socket-timeout="${mongo.socketTimeout}" />    </mongo:mongo-client>    <mongo:db-factory dbname="database" mongo-ref="mongo" />    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">        <constructor-arg ref="mongo" />        <constructor-arg name="databaseName" value="${mongo.databaseName}" />    </bean></beans>

普通的增删改查操作

package com.binxm.dao.impl;import com.binxm.dao.MoUserDao;import com.binxm.pogo.MoUser;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.mongodb.core.MongoTemplate;import org.springframework.data.mongodb.core.query.Criteria;import org.springframework.data.mongodb.core.query.Query;import org.springframework.stereotype.Repository;/** * Created by Administrator on 2017/6/13. */@Repositorypublic class MoUserDaoImpl implements MoUserDao{    @Autowired    private MongoTemplate mongoTemplate;    @Override    public MoUser getUserById(String id) {        Query query = new Query();        //查找        //mongoTemplate.findOne(new Query(Criteria.where("onumber").is("002").and("cname").is("zcy1")),MoUser.class);        //mongoTemplate.findOne(new Query(new Criteria().orOperator(Criteria.where("onumber").is("002"),Criteria.where("cname").is("zc"))),MoUser.class);        //修改        //mongoTemplate.upsert(new Query(Criteria.where("dfs").is("sss")), Update.update("",""),MoUser.class);        //mongoTemplate.updateFirst(new Query(Criteria.where("dfs").is("sss")), Update.update("",""),MoUser.class);        //添加        mongoTemplate.insert(MoUser.class);        mongoTemplate.save(MoUser.class);        //删除        //mongoTemplate.remove(MoUser.class);        query.addCriteria(new Criteria("_id").is(id));        MoUser one = this.mongoTemplate.findOne(query, MoUser.class);        return one;    }}

根据位置坐标查询相关地点信息

package com.binxm.dao.impl;import com.binxm.dao.ShopDao;import com.mongodb.AggregationOptions;import com.mongodb.BasicDBObject;import com.mongodb.Cursor;import com.mongodb.DBObject;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.mongodb.core.MongoTemplate;import org.springframework.stereotype.Repository;import java.util.*;/** * Created by li on 2017/9/24. */@Repositorypublic class ShopDaoImpl implements ShopDao{    @Autowired    private MongoTemplate mongoTemplate;    @Override    public List<DBObject> getShoppingsWithCoordinate(double lon, double lat,double maxDistance) {        List<DBObject> pipeLine = new ArrayList<>();        //https://docs.mongodb.com/manual/reference/command/geoNear/        BasicDBObject aggregate = new BasicDBObject("$geoNear",                new BasicDBObject("near",new BasicDBObject("type","Point").append("coordinates",new double[]{lon, lat}))                        .append("distanceField","dist.calculated")  //distanceField                        // org.springframework.data.mongodb.core.aggregation.GeoNearOperation                        .append("query", new BasicDBObject())  //query  document Optional                        .append("num", 5)               //num number Optional                        .append("maxDistance", maxDistance)  //num number Optional                        .append("spherical",true)     //If using a 2dsphere index, spherical must be true.        );        pipeLine.add(aggregate);//        聚合//        https://docs.mongodb.com/manual/reference/operator/aggregation///        pipeLine.add(new BasicDBObject("$geoNear", geoNear));  BasicDBObject//        pipeLine.add(new BasicDBObject("$match",match));//        pipeLine.add(new BasicDBObject("$skip", skip));//        pipeLine.add(new BasicDBObject("$limit", pageSize));        Cursor cursor=mongoTemplate.getCollection("shop").aggregate(pipeLine, AggregationOptions.builder().build());        List<DBObject> list = new LinkedList<>();        while (cursor.hasNext()) {            list.add(cursor.next());        }        return list;    }}
原创粉丝点击