需求:有很多条件,其中包括根据附近多少米查找信息,这个需要先定位当前人所在的位置(即经纬度),然后在进行这个经纬度的附近进行查找信息,因为之前根据经纬度算地理空间位置是在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匹配条件进行查询,结果正确
分享到:
相关推荐
你可以使用`db.collection.createIndex()`创建索引,可以选择单字段、复合字段或者地理空间索引。索引可以按照升序或降序排列,也可以设置唯一性,防止重复数据。 五、MongoDB与PHP集成 MongoDB提供了PHP驱动程序,...
本文将深入探讨如何利用MongoDB进行地理空间查询,这对于开发涉及地理位置服务的移动应用、物联网项目以及智慧城市应用至关重要。 在MongoDB中,地理位置索引允许我们对地址数据进行高效检索。它提供了多种类型,如...
在Spring框架中,Spring Data MongoDB是一个强大的库,它简化了与MongoDB数据库的交互。这个库允许开发者通过使用注解和基于Java的配置来处理MongoDB的操作。以下是对标题和描述中提到的知识点的详细说明: 1. **@...
Java操作MongoDB实例,压缩包内为完整项目源码,使用MyEclipse软件 见文:https://blog.csdn.net/qq_33427869/article/details/87270444
在本MongoDB实例中,我们将深入探讨这个强大的NoSQL数据库系统,并与C#、MVC和asp.net进行集成。 首先,MongoDB的核心概念是集合(Collections)和文档(Documents)。集合类似于关系数据库中的表,但文档则是基于...
MongoDB复制集搭建实例 MongoDB是一个高性能、开源、无模式的文档型数据库,它以其灵活性、可扩展性和丰富的功能而被广泛应用于大数据处理、Web应用、内容管理系统等多个领域。复制集是MongoDB中的一个重要特性,它...
在本实践教程中,我们将深入探讨如何将SpringMVC框架与MongoDB数据库结合,构建一个高效的应用实例。MongoDB是一个流行的NoSQL数据库,以其灵活性、高性能和易扩展性而受到开发者的青睐。SpringMVC是Spring框架的一...
### MongoDB多实例副本集群搭建详解 #### 一、概述 MongoDB是一种非常流行的NoSQL数据库系统,它提供了高性能、高可用性和易于扩展性等特点。在实际应用中,为了提高系统的可靠性和性能,我们通常会搭建MongoDB的...
MongoDB是一种分布式文档数据库,常用于处理和存储结构化与半结构化的数据。它使用JSON-like的BSON格式存储数据,...在实际开发中,还可以利用更多高级特性,如聚合框架、地理空间查询、索引等,以满足复杂的应用场景。
以下是从给定的标题、描述和标签中提取的MongoDB基本命令和实例的详细说明: 1. **显示数据库**: `show dbs` 命令用来列出当前MongoDB服务器上已存在的所有数据库,以及它们占用的空间大小。 2. **切换数据库**...
二、MongoDB分布式分片实例详解 1. 分片概念:分片是将大数据集分散到多个物理节点上的过程,以提高读写性能和存储容量。MongoDB通过分片实现水平扩展。 2. 设置分片集群:首先,需要启动配置服务器、分片服务器和...
总的来说,这个实例为C#开发者提供了一个全面了解如何使用MongoDB的起点,涵盖了MongoDB数据操作的基础,对于学习和实践中使用MongoDB与C#的结合非常有帮助。通过深入研究并理解这些源码,开发者可以更好地掌握...
mongodb官网给出了一个地理信息查询案例,通过介绍一个基于地图的酒店查询系统,展示了mongodb对地理信息查询的支持。但因为网络原因,导致该数据集无法下载。因此下载下来供各位研究学习使用。 原资源链接: ...
本资料包“MongoDB Java操作大全 源代码 实例”将深入探讨如何使用Java API进行MongoDB的操作。 1. **连接MongoDB** 在Java中,首先需要通过`MongoClient`类建立到MongoDB服务器的连接。例如: ```java ...
5. **数据读写实践**:资料可能包含如何使用MongoDB的CRUD操作(Create、Read、Update、Delete)来插入、查询、更新和删除GeoJSON地理数据的实例,以及如何在MongoDB shell、MongoDB驱动程序或应用程序代码中实现...
在Python中,你可以通过`pymongo.MongoClient()`创建一个客户端实例,然后指定服务器地址和端口来连接到MongoDB实例。 3. **数据库操作**:MongoDB中的数据库类似于其他数据库系统中的模式。你可以使用`client.list...
在这个"Log4j+MongoDB完整实例"中,我们将探讨如何利用Log4j收集应用程序日志,并将这些日志有效地存储到MongoDB中进行分析。 首先,Log4j的核心在于其灵活的配置。通过XML或.properties文件,我们可以定制日志级别...
MongoDB是一款强大的NoSQL数据库,支持丰富的地理空间索引,使得处理地理位置数据变得简单高效。而PHP作为一种常用的服务器端脚本语言,是实现这一功能的理想选择。 首先,让我们了解MongoDB中的地理空间索引。...
将一系列图片文件存储到MongoDB中 java操作mongodb存储文件
Mongodb的使用语法以及同传统sql语句的对比