需求:有很多条件,其中包括根据附近多少米查找信息,这个需要先定位当前人所在的位置(即经纬度),然后在进行这个经纬度的附近进行查找信息,因为之前根据经纬度算地理空间位置是在mysql中进行的,但是发现在mysql中计算很耗CPU,现特改成mongodb来做,mongodb不支持union all功能,所以mongodb还是不满足:
//判断是否按距离排序
if(seq == 1 || seq == 0 || seq == 4){
//默认排序统一采用综合排序
if(seq == 0){
seq = 4;
}
if(lon != 0 && lat != 0){
}else{
seq=2;
}
}
DBObject sortFileds = new BasicDBObject();
DBObject geoNearFileds = new BasicDBObject();
geoNearFileds.put("distanceMultiplier", r);
geoNearFileds.put("near", new double[]{lon,lat});
geoNearFileds.put("spherical",true);
geoNearFileds.put("distanceField", "distance");
geoNearFileds.put("includeLocs", "position");
geoNearFileds.put("query", criteria.getCriteriaObject());
if (nearby!=0) {//选择了附近
geoNearFileds.put("maxDistance", nearby);
if (seq==0||seq==4) {
sortFileds.put("seqScore", -1);
sortFileds.put("evalGoodCount", -1);
sortFileds.put("distance", 1);
if (nearby == 0) {
sortFileds.put("seqRating", 1);
}
sortFileds.put("carNo", 1);
}
sortFileds = sort(seq, sortFileds);
}else{//未选择附近
if (seq==0||seq==4) {
sortFileds.put("seqRating", -1);
sortFileds.put("carNo", 1);
sortFileds.put("distance", 1);
}else {
sortFileds = sort(seq, sortFileds);
}
}
DBObject geoNear = new BasicDBObject("$geoNear", geoNearFileds);
DBObject sort = new BasicDBObject("$sort", sortFileds);
//DBObject match = new BasicDBObject("$match", criteria.getCriteriaObject());
DBObject skip = new BasicDBObject("$skip",(pageNum-1)*pageSize);
DBObject limit = new BasicDBObject("$limit",pageSize);
List<DBObject> dbObjects = super.aggregate(CarInfo.class, geoNear/*,match*/,skip,limit,sort);
List<CarInfo> carInfos = new ArrayList<CarInfo>();
if (CollectionUtils.isEmpty(dbObjects)) {
return null;
}
for (DBObject dbObject : dbObjects) {
CarInfo carInfo = new CarInfo();
carInfo = MongoUtils.dbObject2Bean(dbObject, carInfo);
carInfo.setId(dbObject.get("_id").toString());
if (tag==1) {
carInfo.setCoverPic("1"+carInfo.getCoverPic());
}else {
carInfo.setCoverPic("2"+carInfo.getCoverPic());
}
carInfo.setEvalCount((Integer.valueOf(dbObject.get("evalGoodCount")+"")+Integer.valueOf(dbObject.get("evalMediumCount")+"")+Integer.valueOf(dbObject.get("evalBadCount")+""))+"");
carInfos.add(carInfo);
}
这段代码之前使用aggregate $match来进行根据条件查询,发现查询的结果跟实际结果差距很大,至今不知道为何,现改成geoNear的query匹配条件进行查询,结果正确
分享到:
相关推荐
spring mongodb mongodb实例,spring data mongodb 操作实例总结
MongoDB Java操作大全 源代码 实例
MongoDB从基础到精通,实例讲解。最后通过和PHP连接做了一个新闻发布系统的实例2012最新的喽!
Java操作MongoDB实例,压缩包内为完整项目源码,使用MyEclipse软件 见文:https://blog.csdn.net/qq_33427869/article/details/87270444
mongodb 复制集搭建实例 博客介绍https://blog.csdn.net/weixin_42749765/article/details/82143616
很全面的mongodb 查询语法和实例 $gt $lt $gte $lte $exists $size $type 等等
mongodb中文API及分布式分片实例详解。
该文件是学习时候使用.附MongoDB运行程序!
介绍php7.0以上使用mongdb的基本方法,并提供mongodb随机获取一条记录的测试实例。
本篇文章将会以Mongodb为数据库,讲述如何在数据库层级进行定位查询。具有很好的参考价值,下面跟着小编一起来看下吧
1、mongodb常规操作 2、测试数据多线程生产 3、单元测试查询效率
简单搭建mongodb集群,可以多实例访问模拟的吧数据库。分别为四台主服务器,两台从服务器,一台仲裁服务器
C#调用MongoDB实例,MongoDB必须使用账户登录,修改MongoDB端口 C#调用MongoDB实例,MongoDB必须使用账户登录,修改MongoDB端口
Mongodb回收磁盘空间方案,在Mongodb下删除文件但是空间不会释放,怎么实现空间的释放
NodeJs+MongoDB+Express+Async实现增删改查的实例 字数字数字数
Mongodb的使用语法以及同传统sql语句的对比
MongoDB的CURD实例附带C#官方驱动集
php MongoDB操作实例,代码齐全
1、show dbs 显示当前数据库服务器上的数据库 2、use pagedb 切换到指定数据库pagedb的上下文,可以在此上下文中管理pagedb数据库以及其中的集合等 3、show collections 显示数据库中所有的集合(collection) ...
MongoDB备份与恢复实例.pdf 学习资料 复习资料 教学资源