2015-02-11 55 views
1

我们正在使用MongoDB的副本集,其中包含1个主节点,1个辅助节点和1个仲裁器。Spring数据 - MongoDB geoNarar没有获得分布在复制组中

在我们的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 query is inc在尊重所指定的阅读偏好的操作中。

回答

1

事实证明,spring-data-mongodb不会将在mongoTemplate上指定的读取首选项传递到基础com.mongodb.Mongo连接池 - 用于聚合。它会通过简单查找操作的读取首选项。

我们必须修改我们的spring配置 - 不使用spring数据的mongo:mongo,它没有提供指定读取偏好的功能 - 但是编写我们自己的Factory bean来创建相同的地方,我们可以在com上设置读取偏好。 mongodb.Mongo。利用这一点,我们能够将我们的地理汇总查询也引导至我们指定的任何读取首选项。