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

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

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

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

=>

[{ "$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}]

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

=>

[{ "$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分页的结果。

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

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

GeoResults<MyClass> geoResults = mongoOperations.query(MyClass.class)
  .as(MyClass.class)                          
  .near(NearQuery.near(point)
    .maxDistance(distance)
    .query(new Query(Criteria.where("categories").is("myCategory")))
    .with(page))
  .all();

long count = mongoOperations.count(new Query(Criteria.where("categories").is("myCategory").and("location").near(point).maxDistance(distance.getValue())), MyClass.class);

return new GeoPage<MyClass>(geoResults, page, count);

暂无答案!

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

相关问题