mongodb - 如何告诉 mongodb 聚合框架在主节点上执行
问题描述
我有一个带有 3 个节点的 Mongodb 副本集和一个配置如下的 Spring 应用程序:
<mongo:mongo id="mongo" replica-set="${mongo.replicaset}">
<mongo:options auto-connect-retry="true" slave-ok="true" />
</mongo:mongo>
<mongo:db-factory dbname="${mongo.dbname}" username="${mongo.username}" password="${mongo.password}" mongo-ref="mongo" />
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
</bean>
<mongo:repositories base-package="com.nounou.repository" />
当我使用 mongoOperations 运行聚合操作时,它会转到辅助副本。而且因为我试图使用舞台将结果直接写入连接$out
,所以我收到了这个错误:
"errmsg" : "failed to create temporary $out collection 'smn.tmp.agg_out.410': { ok: 0.0, errmsg: \"Not primary while creating collection smn.tmp.agg_out.410\", code: 10107, codeName: \"NotMaster\" }"
基本上,它说它不能将结果写入辅助节点。如果我设置 slave-ok="false"
,我不会再遇到问题了,因为它会将读取操作也切换到主节点。但我不能认为这是一个解决方案,因为它只会让 1 个节点管理读取和写入。
是否有任何配置或解决方法(在 spring 或 mongodb 级别)强制在主节点上处理聚合?
解决方案
推荐阅读
- javascript - Unable to get the value of variable outside jquery function
- arm64 - 尝试使用 ndk16 构建时,Android 构建失败
- nginx - Nginx geoip 重定向,但排除 URL
- solr - Solr fetch查询使用最少的数字?
- java - 在 POJO 中附加图像
- karate - 如何在空手道上进行条件变量定义
- sql - 与 SQL 中的最新日期相加
- python - 使用 db 作为进程之间的桥梁为多进程项目创建“标志”的最佳实践?
- java - Elasticsearch TransportClient 连接 [Java]
- postgresql - 无法使用 aws 导入 Heroku Postgres