(个人记录)简单的使用java操作mongodb来实现附近人距离

简单的记录一下使用IDEA操作java连接Mongodb来查询附近人
1.创建一个java项目,使用springboot也可以
在这里插入图片描述
2.在项目下创建lib文件夹,并将Mongobd的jar包放入(这步具体操作可以百度,很简单)
在这里插入图片描述
3.引入jar包后就可以使用Mongodb的一些对象了

//连接Mongodb
 MongoClient mongoClient = new MongoClient("这里写Mongodb的ip,端口不写的话默认是27017,例子:127.0.0.1:27017");
 //连接你的数据库
 MongoDatabase mongoDatabase = mongoClient.getDatabase("这里写你要数据库的名称");
 //连接你的表/集合,没有则新创建一个
 MongoCollection<Document> collection = mongoDBUtils.getMongo().getCollection("这里写你的表/集合");

4.之后你就可以使用获取的collection对象来进行操作数据库了,比如查询全部

//find()方法查询全部
FindIterable<Document> documents = collection.find();
//拿到所有的文档集合后使用迭代器
        MongoCursor<Document> iterator = documents.iterator();
//循环出每一个文档
        while (iterator.hasNext()) {
//测试效果,或操作得到的文档
            System.out.println(iterator.next());
        }

5.因为我要实现附近人的功能,要使用aggregate这个方法,在mongodb中写法是这样的

db.collection.aggregate({
    $geoNear:{
        near: [115.995593,28.681813], // 当前坐标
        spherical: true, // 计算球面距离
        distanceMultiplier: 6378137, // 地球半径,单位是米,那么的除的记录也是米
        maxDistance: 2000/6378137, // 过滤条件2000米内,需要弧度
        distanceField: "distance" // 距离字段别名
    }
})

6.向数据库中写入一个或多个数据

//使用document对象,拼接好数据
        Document document = new Document("name", "张三")
                .append("address", "北京天安门左胡同2号")
                .append("gender", (double)0)
                .append("loc", Arrays.asList(116.000821,28.68129));//因为坐标字段要使用一个,要求数组,插入数组使用这种插入
 //插入一个文档
        collection.insertOne(document);

7.这个要在java里也进行实现

//首先创建一个集合,泛型是BasicDBObject
 List<BasicDBObject> basicDBObjectList = new ArrayList<>();
 //创建一个BasicDBObject对象,然后拼接数据,它也是key-value类型的,对应拼接就行
        BasicDBObject basicDBObject = new BasicDBObject("$geoNear",
                new BasicDBObject("near", new double[]{121.286671, 41.015798}).//当前用户坐标
                        append("spherical", true).//计算球面距离
                        append("distanceMultiplier", 6378137).//地球半径,单位是米,那么的除的记录也是米
                        append("maxDistance", (double) 2000000 / 6378137).//过滤条件2000米内,需要弧度,这里计算平局距离要加double,否则会查询全部数据
                        append("distanceField", "distance"));//距离字段别名
//然后将这个对象add到集合中
        basicDBObjectList.add(basicDBObject);
//然后用上面获取的collection对象中的aggregate方法,参数就是这个集合
        AggregateIterable<Document> inventory = collection.aggregate(basicDBObjectList);
//拿到这个集合后使用迭代器
        MongoCursor<Document> iterator = inventory.iterator();//迭代器
//遍历
        while (iterator.hasNext()) {
//获取单个文档
            Document dnext = iterator.next();
//拿到单个文档然后get,因为我们上面设置了距离字段别名为distance,这里就获取它,查看你输入坐标附近2000m内的数据,当然,要先向数据库中存放数据,并设置2d索引后才能查询
            double distance = (double) dnext.get("distance");
//打印距离
            System.out.println("距离为:" + dnext);
        }

(个人记录)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值