【问题标题】:Spring Data- MongoDB geoNear not getting distributed in replicasetSpring Data-MongoDB geoNear 没有在副本集中分布
【发布时间】:2015-03-25 15:03:55
【问题描述】:

我们正在使用具有 1 个主节点、1 个辅助节点和 1 个仲裁器的 MongoDB 副本集。

在我们的 java 应用程序中,我们使用 Spring-data-mongodb 与 MongoDB 进行交互。 我们应用程序中的一个关键用例涉及使用带有距离排序的 geoNear 查询的聚合管道,类似于这样(不包括此操作的查询部分 - 但它涉及检查非地理字段,例如位置的状态检查

[ { "$geoNear" : { "query" : {  ..... } , 
"maxDistance" : 4.7035678286621944E-5 , "distanceMultiplier" : 6378.137 , 
"near" : [ 77.09979953386978 , 28.442629624873796] , "spherical" : true , "distanceField" : "distance"}} ,
 { "$project" : { "distance" : 1}}]

我们已经设置了读取操作的副本首选项。 但是,无论我们使用 NEAREST 还是 SECONDARY_PREFERRED 作为我们的读取偏好,geonear 查询始终定向到主节点,并且在副本集之间不平衡。

我们在这里遗漏了什么吗?根据 mongodb 操作,geoNear 查询包含在尊重指定读取首选项的操作中。

【问题讨论】:

    标签: spring mongodb geospatial


    【解决方案1】:

    原来 spring-data-mongodb 没有将 mongoTemplate 上指定的读取首选项传递给底层 com.mongodb.Mongo 连接池 - 用于聚合。它将通过简单查找操作的读取首选项。

    我们不得不修改我们的 spring 配置——不使用 spring data 的 mongo:mongo,它没有提供指定读取首选项的功能——而是编写我们自己的 Factory bean 来创建相同的工厂 bean,我们可以在 com.mongodb 上设置读取首选项.Mongo。这样,我们就可以将我们的 geonear 聚合查询定向到我们指定的任何读取首选项。

    【讨论】:

      猜你喜欢
      • 2021-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      • 1970-01-01
      • 2019-02-13
      • 1970-01-01
      • 2020-04-11
      相关资源
      最近更新 更多