当前位置: 首页 > 知识库问答 >
问题:

Spring数据mongodb地理查询

齐承泽
2023-03-14

我正在使用spring数据与mongodb通信,我正在寻找一种执行地理查询的方法,该方法将通过DB中给定的地理点检索附近的纵断面,我对查询的要求如下:

1) 按距离限制2)按返回的配置文件数量限制3)根据配置文件文档中的时间字段进行额外搜索4)从检索到的文档中包括/排除字段的能力

起初我用mongoTemplate.geo接近法...

   Query criteria = new Query(Criteria.where("time").gte("some_date")); 
   criteria.fields().exclude("friends");
    NearQuery query = NearQuery.near(point).maxDistance(maxDistance)
            .num(limit).query(criteria);
    GeoResults<Profile> result = mongoTemplate
            .geoNear(query, Profile.class);<br/>

但是后来我意识到mongo不支持在Geo近东查询中包含/排除字段。
所以我在考虑近查询,似乎在sping-data中执行那种“复杂”查询的唯一方法是使用@Query注释,有没有办法在这种查询中支持上面的要求2,3?还有其他方法吗?
谢谢

共有1个答案

步博厚
2023-03-14

你的问题实际上包含了你需要的所有答案。您只需要使用query。添加条件将它们放在一起。

1: 使用半径为2的圆。使用查询。限制(计数)
3。使用查询。其中(“日期”)。gte()
4。使用字段预测结果

给你

    Point point = new Point(6.12343, 3.121211);
    Distance distance = new Distance(100, Metrics.KILOMETERS);
    Circle circle = new Circle(point, distance);
    Integer resultLimit = 20; //Limit to 20 records
    Criteria geoCriteria = Criteria.where("position").withinSphere(circle);
    Criteria timeCriteria = Criteria.where("time").gte(new Date());
    Query query = Query.query(geoCriteria);
    query.addCriteria(timeCriteria);
    query.fields().exclude("friends");
    mongoTemplate.find(query, Profile.class);
 类似资料:
  • Spring data提供了各种用于CRUD、分页和mongob排序的存储库。当我们需要来自mongob的使用各种属性的文档时,我们倾向于编写方法或编写带有显式查询的方法,并用注释。但是如果我的文档有许多属性并且我需要各种获取文档的方法,Spring是否提供了一种“存储库方法”来接收属性和值的Map?编写各种可能很麻烦。使用QueryDSL似乎是一种选择,但需要代码生成和build.gradle更

  • 有什么方法可以用spring batch实现这一点,或者我应该创建一个Dao并批量删除每个集合的旧数据。

  • 我正在研究spring boot数据mongoDB。我在查询包含特定对象列表的嵌套文档时遇到一些问题。 模拟课 请求类 示例JSON 所需的查询输出:传入endpoint、mockName、body、params和method 从数据库中获取mockName的mock对象 在返回的模拟的请求列表中匹配endpoint、主体、参数和方法 返回符合上述所有条件的请求的响应字段 从上面的例子json:

  • 我使用Spring(引导)2.2.7与mongoDB 4.0运行在Debian Stretch(9.12)。我已经设置了3个集合,我试图通过聚合查找级联操作加入这些集合。 操作(节点类) 股票(组件类) 目录(产品类) 每个类都有一个将它们链接在一起的uuid字符串属性。 节点(传感器、接收器、基站等) 组件(带有序列号、条形码的交付产品…) 产品(市场人工制品) 在mongo shell中运行此

  • 我有以下数据模型 和spring数据存储库接口 但findByIdIn方法返回一个空列表,即使mongodb中存在ID。我已经为文档中的其他字段测试了findbyxxin(),它们都工作得很好。但当涉及到文档id时,情况并非如此。 这是我第一次使用mongoDB,但我熟悉Spring data jpa。 我知道 但我还需要对结果应用分页,因此对我的情况没有帮助。 我尝试使用@Query(带有in查

  • 我想通过使用MongoDB的异步客户机API访问MongoDB的Spring数据来执行非阻塞数据库查询。 到目前为止,我只看到了返回一个 并使用注释查询方法,例如。 但文档明确指出,实际的的任务中。所以它并不是真正的非阻塞,而是使用线程池来解耦线程,而这个线程池并不是很好地伸缩。 因此,我的问题是: 如何使用MongoDB异步驱动程序的NIO特性在非阻塞模式下执行查询? 到目前为止,我看到的唯一的