您的位置:首页 > 数据库 > Mongodb

mongodb lbs 坐标定位 java操作版本

2016-04-29 11:00 447 查看
好久没写笔记了。。。。。。
话不多说直接上代码,     

    /**
     * @Title: testjingweidu
     * @Description: 先添加两条测试数据
     * @param 设定文件
     * @return void 返回类型
     * @throws
     */
    @Test
    public void testjingweidu() {

        Mongo mongo;
        try {
            mongo = new Mongo("**************", 27017);
            // 连接名为yourdb的数据库,假如数据库不存在的话,mongodb会自动建立
            DB db = mongo.getDB("yourdb");
            // Get collection from MongoDB, database named "yourDB"
            //
            // 从Mongodb中获得名为yourColleection的数据集合,如果该数据集合不存在,Mongodb会为其新建立
            DBCollection collection = db.getCollection("testss");

            BasicDBList coordinates = new BasicDBList();
            coordinates.put(0, -73.97);
            coordinates.put(1, 40.77);
            collection.insert(new BasicDBObject("name", "Central Park")
                            .append("coordinates", coordinates)
                            .append("category", "Parks"));

            coordinates.put(0, -73.88);
            coordinates.put(1, 40.78);
            collection.insert(new BasicDBObject("name", "La Guardia Airport")
                    .append("coordinates", coordinates)
                    .append("category", "Airport"));

        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

-----------------------------------------------我是分割线--------------------------------------------------------------
前提条件:

建立空间索引的key可以使用array或内嵌文档存储,但是前两个elements必须存储固定的一对空间位置数值。如

{ loc : [ 50 , 30 ] }
{ loc : { x : 50 , y : 30 } }
{ loc : { foo : 50 , y : 30 } }
{ loc : { lat : 40.739037, long: 73.992964 } }


    /**
     * @Title: testsuoyin
     * @Description: 添加2d索引    ,注意2d索引需要特定条件   
     * @param 设定文件
     * @return void 返回类型
     * @throws
     */
    @Test
    public void testsuoyin() {
        Mongo mongo;
        try {
            mongo = new Mongo("**************", 27017);
            // 连接名为yourdb的数据库,假如数据库不存在的话,mongodb会自动建立
            DB db = mongo.getDB("yourdb");
            // Get collection from MongoDB, database named "yourDB"
            //
            // 从Mongodb中获得名为yourColleection的数据集合,如果该数据集合不存在,Mongodb会为其新建立
            DBCollection collection = db.getCollection("hotel");

            BasicDBObject dObject1 = new BasicDBObject();
            dObject1.put("coordinates", "2d");//2d  -----2dsphere   区别在下边
            collection.ensureIndex(dObject1);

        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

2d 和2dsphere   区别,我个人测试觉得他的区别  2d填写的是
   搜索的时候入参是经纬度  ,2dsphere   可以直接填距离  也就是多少m

---------------------------以上是java 添加索引,本人比较懒,不想直接dos操作----------------------------

-------------------------下边就是查询---------------

    /**
     * @Title: findLat
     * @Description: TODO(这里用一句话描述这个方法的作用)
     * @param 设定文件
     * @return void 返回类型
     * @throws
     */
    @Test
    public void findLat() {
        Mongo mongo;
        try {
            mongo = new Mongo("**********", 27017);
            DB db = mongo.getDB("yourdb");
            DBCollection collection = db.getCollection("hotel");

            BasicDBList myLocation = new BasicDBList();
            myLocation.put(0,-73.88);
            myLocation.put(1, 40.78);
            DBCursor myDoc = collection.find(
                            new BasicDBObject("coordinates",
                                    new BasicDBObject("$near", myLocation)
                                         .append("$maxDistance",  0.05)
//这里是2d索引,所以这里应该是经纬度 具体的我也说不大清楚,如果是2dsphere   的索引,可以直接添加
距离,这里是方圆  多少m
//这里可以继续添加别的查询条件等,直接append就可以 。具体的我在后边再写个demo
                            )
                        ).limit(5);  //这里是需要查询出来的条数。要多少写多少啊,这个值是最大值,不够的话就。。
            while(myDoc.hasNext()){
                System.out.println("-----: "+myDoc.next());
            }
        System.out.println(myDoc);

        } catch (UnknownHostException e) {

            e.printStackTrace();
        }
    }

----------------------------------------以上代码是mongo原生写法。所有东西都用java操作的--------------------------------
            再写一个使用mogoTemplate  工具模板的。区别主要在与查询条件入参的方式   。。。。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: