Skip to content

Commit f06adb5

Browse files
committed
feat: readPreference 副本集读偏好支持 (P2 Option B)
- 添加 config.readPreference 全局配置参数 - 支持 5 种读偏好模式(primary/primaryPreferred/secondary/secondaryPreferred/nearest) - 适用场景:副本集部署、读写分离、全球分布式部署 - 完整文档:docs/readPreference.md (300+ 行) - 示例代码:examples/readPreference.examples.js (7 个场景) - 测试覆盖:3 个测试用例,12/12 测试通过 - TypeScript 类型声明已同步更新 参考: P2 高级查询选项评估 (analysis-reports/2025-11-06-advanced-query-options-evaluation.md)
1 parent 75f5214 commit f06adb5

8 files changed

Lines changed: 783 additions & 37 deletions

File tree

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,15 @@
55
## [未发布]
66

77
### 新增
8+
- **readPreference 副本集读偏好支持**(2025-11-07)
9+
- 在连接配置中添加 `readPreference` 选项,支持副本集读写分离场景
10+
- 支持 5 种读偏好模式:`primary`(默认)、`primaryPreferred``secondary``secondaryPreferred``nearest`
11+
- 适用场景:副本集部署、降低主节点负载、全球分布式部署
12+
- TypeScript 类型声明已同步更新(`BaseOptions.readPreference`
13+
- 示例文件:`examples/readPreference.examples.js`(7 个使用场景)
14+
- 测试覆盖:mongodb-connect.test.js 新增 readPreference 配置透传测试
15+
- ⚠️ 注意:仅全局配置(连接级别),MongoDB 专属特性,读从节点可能有复制延迟
16+
817
- **comment 参数支持**(2025-11-07)
918
-`find``findOne``count` 方法添加 `comment` 参数,用于生产环境日志跟踪
1019
- 支持在 MongoDB 日志中标识查询来源、业务场景、用户/会话/traceId 等关键信息

README.md

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,42 @@ await msq.close();
290290

291291
---
292292

293-
### 6. 事件监听
293+
### 6. 副本集读偏好配置(readPreference)
294+
295+
```js
296+
// 副本集读写分离(降低主节点负载)
297+
const msq = new MonSQLize({
298+
type: 'mongodb',
299+
databaseName: 'shop',
300+
config: {
301+
uri: 'mongodb://host1:27017,host2:27018,host3:27019/?replicaSet=rs0',
302+
readPreference: 'secondaryPreferred' // 优先读从节点
303+
}
304+
});
305+
306+
await msq.connect();
307+
const { collection } = msq;
308+
309+
// 所有查询自动从从节点读取(降低主节点负载)
310+
const products = await collection('products').find({
311+
query: { category: 'electronics' }
312+
});
313+
314+
console.log(`✅ 从从节点读取 ${products.length} 条数据`);
315+
```
316+
317+
**支持的读偏好模式**:
318+
- `primary` - 仅读主节点(默认)
319+
- `primaryPreferred` - 优先读主节点,主节点故障时读从节点
320+
- `secondary` - 仅读从节点(适合分析/报表)
321+
- `secondaryPreferred` - 优先读从节点(推荐,读写分离)
322+
- `nearest` - 读最近的节点(全球分布式部署)
323+
324+
**详细文档**: [docs/readPreference.md](./docs/readPreference.md)
325+
326+
---
327+
328+
### 7. 事件监听
294329

295330
```js
296331
// 监听慢查询

STATUS.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,8 @@
146146
- 缓存可用性检查:缓存不可用时抛出 CACHE_UNAVAILABLE 错误
147147
- 使用场景:系统启动预热、运维监控、数据变更后清除缓存、内存管理
148148
- ☑️ 高级查询/游标选项(已评估,分阶段实施)
149-
- ✅ 已支持: hint, collation, batchSize, comment (find/findOne/count/aggregate)
150-
- 🗺️ P2 可选实施: readPreference (全局配置), max/min, readConcern, let
149+
- ✅ 已支持: hint, collation, batchSize, comment (find/findOne/count/aggregate), **readPreference (全局配置)**
150+
- 🗺️ P2 可选实施: max/min, readConcern, let
151151
- ❌ 不实施: noCursorTimeout, tailable, returnKey, allowPartialResults, readPreferenceTags
152152
- 详细评估: [analysis-reports/2025-11-06-advanced-query-options-evaluation.md](../../guidelines/analysis-reports/2025-11-06-advanced-query-options-evaluation.md)
153153

0 commit comments

Comments
 (0)