多准则spring数据mongodb地理空间查询

ee7vknir  于 2021-07-26  发布在  Java
关注(0)|答案(0)|浏览(371)

我使用的是springdatamongodb2.2.4,我试图用多个条件将分页文档作为给定点附近的geopage。
由于未正确生成请求,使用地理空间查询似乎无法按预期工作:

  1. findByLocationNearAndCategories(Point point, Distance distance, String category, Pageable pageable)

=>

  1. [{ "$geoNear" : { "query" : { "categories" : { "x" : 3.8235442, "y" : 43.5833389}}, "maxDistance" : 0.1567855942887398, "distanceMultiplier" : 6378.137, "near" : [3.8235442, 43.5833389], "spherical" : true, "distanceField" : "dis"}}, { "$limit" : 4}]

  1. findByCategoriesAndLocationNear(String category, Point point, Distance distance, Pageable pageable)

=>

  1. [{ "$geoNear" : { "query" : { "categories" : "myCategory", "location" : { "$nearSphere" : { "x" : 3.8235442, "y" : 43.5833389}, "$maxDistance" : 0.1567855942887398}}, "maxDistance" : 0.1567855942887398, "distanceMultiplier" : 6378.137, "near" : [3.8235442, 43.5833389], "spherical" : true, "distanceField" : "dis"}}, { "$limit" : 4}]

这会导致错误“太多geonar表达式”。
我尝试过使用mongooperations,但我只能获得georesults,而不是使用geopage分页的结果。

  1. GeoResults<MyClass> result = mongoOperations.query(MyClass.class)
  2. .as(MyClass.class)
  3. .near(NearQuery.near(point)
  4. .maxDistance(distance)
  5. .query(new Query(Criteria.where("categories").is("myCategory")))
  6. .with(page))
  7. .all()

有什么方法可以达到我的目标吗?谢谢!
编辑
我现在通过第二次请求来获得总计数来管理它,但是我希望以一种优化的方式来实现它。

  1. GeoResults<MyClass> geoResults = mongoOperations.query(MyClass.class)
  2. .as(MyClass.class)
  3. .near(NearQuery.near(point)
  4. .maxDistance(distance)
  5. .query(new Query(Criteria.where("categories").is("myCategory")))
  6. .with(page))
  7. .all();
  8. long count = mongoOperations.count(new Query(Criteria.where("categories").is("myCategory").and("location").near(point).maxDistance(distance.getValue())), MyClass.class);
  9. return new GeoPage<MyClass>(geoResults, page, count);

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题