我正在基于 mongo java驱动程序为mongo mapreduce 项目设置 readPreference 。
这里有一些问题。当mapreduce查询输出选项为非 INLINE时(我使用REPLACE,因为我的文档结果超过16mb)。在这种情况下,我仍然可以使用ReadPreference.secondaryPreferred吗?我看到它在日志中不起作用(不是ping辅助数据库,而是主数据库)。想知道吗?
似乎这里有2个选项。
1与mongo服务器连接时。
MongoClientOptions.Builder mongoClientOptionsBuilder = MongoClientOptions.builder().readPreference(ReadPreference.secondary())
2在您的查询调用中
MapReduceCommand cmd = new MapReduceCommand(loan, $mapQuery,$reduceQuery,null, MapReduceCommand.OutputType.REPLACE, builder.get())
cmd.setReadPreference(ReadPreference.secondaryPreferred())
在3.0.4之前请注意Java mongo驱动程序,其中存在一些错误(https://jira.mongodb.org/browse/JAVA-1944)
基于https://docs.mongodb.com/ecosystem/drivers/driver-compatibility-reference/#java-driver-compatibility
升级mongo java驱动程序更新
好的,那是快速更新。
https://docs.mongodb.com/manual/reference/method/db.collection.mapReduce/
在这里检查。
字符串或文档
指定映射归约运算结果的位置。您可以输出到集合,使用操作输出到集合或内联输出。在集合的主要成员上执行map-reduce操作时,您可以输出到集合。 在二级成员上,您只能使用嵌入式输出。
查看选项以获取更多信息。
因此,次要(副本集)不可以使用REPLACE