monsqlize 1.0.6 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # 变更日志 (CHANGELOG)
2
2
 
3
3
  > **说明**: 版本概览摘要,详细变更见 [changelogs/](./changelogs/) 目录
4
- > **最后更新**: 2026-01-08
4
+ > **最后更新**: 2026-01-17
5
5
 
6
6
  ---
7
7
 
@@ -9,6 +9,8 @@
9
9
 
10
10
  | 版本 | 日期 | 变更摘要 | 详细 |
11
11
  |------|------|---------|------|
12
+ | [v1.0.8](./changelogs/v1.0.8.md) | 2026-01-17 | 🎉 重大功能:多连接池 + Update 聚合管道 + Saga 事务 + Change Stream 同步 | [查看](./changelogs/v1.0.8.md) |
13
+ | [v1.0.7](./changelogs/v1.0.7.md) | 2026-01-09 | 🔧 依赖更新:schema-dsl@1.1.3 修复类型错误消息 + 测试用例 Schema 语法修复 | [查看](./changelogs/v1.0.7.md) |
12
14
  | [v1.0.6](./changelogs/v1.0.6.md) | 2026-01-08 | 文档完善:新增 ObjectId 自动转换文档 + 验证所有 v1.3.0+ 功能文档 | [查看](./changelogs/v1.0.6.md) |
13
15
  | [v1.0.5](./changelogs/v1.0.5.md) | 2026-01-08 | Schema 验证默认启用 + Model 自动加载机制 + 类型定义完善 | [查看](./changelogs/v1.0.5.md) |
14
16
  | [v1.0.4](./changelogs/v1.0.4.md) | 2026-01-07 | 新功能:虚拟字段、默认值 + Bug 修复:嵌套 Populate + 测试改进 | [查看](./changelogs/v1.0.4.md) |
@@ -23,12 +25,69 @@
23
25
 
24
26
  | 版本系列 | 版本数 | 主要改进方向 |
25
27
  |---------|-------|------------|
26
- | v1.0.x | 7 | Model 层完善、Schema 验证、自动加载、批量操作、文档完善 |
28
+ | v1.0.x | 9 | 企业级功能、分布式支持、Model 层完善、Schema 验证、依赖更新 |
27
29
 
28
30
  ---
29
31
 
30
32
  ## 里程碑版本
31
33
 
34
+ ### v1.0.8 - 企业级功能升级 🎉
35
+
36
+ **发布日期**: 2026-01-16
37
+ **重要性**: ⭐⭐⭐⭐⭐
38
+
39
+ **核心功能**:
40
+ - ✅ **企业级多连接池管理**: 支持 primary、secondary、analytics、custom 角色
41
+ - ✅ **智能选择策略**: auto、roundRobin、weighted、leastConnections、manual
42
+ - ✅ **健康检查机制**: 自动故障检测和恢复,支持自定义检查间隔和重试次数
43
+ - ✅ **Update 聚合管道**: updateOne/updateMany 支持聚合管道语法
44
+ - ✅ **Saga 分布式事务**: 完整的补偿机制,支持跨服务事务
45
+
46
+ **质量提升**:
47
+ - 🏆 **测试覆盖率**: 90.77% (从 37.8% 提升,+53%)
48
+ - 🏆 **测试数量**: 400+个测试用例 (增长 4000%)
49
+ - 🏆 **函数覆盖率**: 95.23%
50
+ - 🏆 **核心功能**: 100% 测试覆盖
51
+ - 🏆 **行业领先**: 超过 85% 的开源项目
52
+
53
+ **重大改进**:
54
+ 1. **多连接池架构**:
55
+ - ConnectionPoolManager: 统一管理多个连接池
56
+ - HealthChecker: 实时健康监控
57
+ - PoolSelector: 5种智能选择策略
58
+ - PoolStats: 完整的统计收集
59
+
60
+ 2. **Update 聚合管道**:
61
+ - 支持字段间计算 (`$add`、`$multiply`、`$subtract`)
62
+ - 条件赋值 (`$cond`、`$ifNull`)
63
+ - 多阶段转换 (`$concat`、`$toLower`、`$toUpper`)
64
+ - 完全兼容 MongoDB 4.2+ 语法
65
+
66
+ 3. **Saga 分布式事务**:
67
+ - 自动补偿机制
68
+ - 事务状态跟踪
69
+ - 支持超时和重试
70
+ - 完整的错误处理
71
+
72
+ **详细信息**: [查看 changelogs/v1.0.8.md](./changelogs/v1.0.8.md)
73
+
74
+ ---
75
+
76
+ ### v1.0.7 - 依赖更新与测试修复 🔧
77
+
78
+ **发布日期**: 2026-01-09
79
+ **重要性**: ⭐⭐⭐
80
+
81
+ **核心改进**:
82
+ - ✅ 升级 schema-dsl 到 v1.1.3(修复类型错误消息模板变量未替换 bug)
83
+ - ✅ 修复测试用例中错误的 Schema 语法(17处)
84
+ - ✅ 所有测试通过(38/38 测试套件,100%)
85
+ - ✅ 将 schema-dsl 从 devDependencies 移至 dependencies(Model 层运行时依赖)
86
+
87
+ **详细信息**: [查看 changelogs/v1.0.7.md](./changelogs/v1.0.7.md)
88
+
89
+ ---
90
+
32
91
  ### v1.0.6 - 文档完善 📚
33
92
 
34
93
  **发布日期**: 2026-01-08
package/README.md CHANGED
@@ -11,7 +11,7 @@
11
11
 
12
12
  [![npm version](https://img.shields.io/npm/v/monsqlize.svg)](https://www.npmjs.com/package/monsqlize)
13
13
  [![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue.svg)](./index.d.ts)
14
- [![Test Coverage](https://img.shields.io/badge/Coverage-99.5%25-brightgreen.svg)](https://codecov.io/gh/vextjs/monSQLize)
14
+ [![Test Coverage](https://img.shields.io/badge/Coverage-90.77%25-brightgreen.svg)](./TEST-COVERAGE-REPORT.md)
15
15
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
16
16
  [![MongoDB](https://img.shields.io/badge/MongoDB-4.4%2B-green.svg)](https://www.mongodb.com/)
17
17
  [![Node.js](https://img.shields.io/badge/Node.js-16%2B-brightgreen)](https://nodejs.org/)
@@ -256,6 +256,14 @@ const users = await collection.find({
256
256
  npm install monsqlize
257
257
  ```
258
258
 
259
+ **自动安装的依赖**:
260
+ - ✅ `mongodb` - MongoDB 官方驱动
261
+ - ✅ `schema-dsl` - Schema 验证库(Model 层必需)
262
+ - ✅ `ssh2` - SSH 隧道支持
263
+
264
+ **可选依赖**:
265
+ - ⚠️ `ioredis` - Redis 多层缓存(启用 L2 缓存需要)
266
+
259
267
  ### 基础使用
260
268
 
261
269
  ```javascript
@@ -301,7 +309,9 @@ await msq.close();
301
309
 
302
310
  ### 使用 Model 层(可选)
303
311
 
304
- 如果需要 **Schema验证**、**Populate关联查询**、**Hooks生命周期** 等 ORM 特性,可以使用 Model 层:
312
+ 如果需要 **Schema验证**、**Populate关联查询**、**Hooks生命周期** 等 ORM 特性,可以使用 Model 层。
313
+
314
+ > **📦 依赖说明**: Model 层需要 `schema-dsl` 包支持(已随 monsqlize 自动安装,无需额外操作)
305
315
 
306
316
  ```javascript
307
317
  const MonSQLize = require('monsqlize');
@@ -319,7 +329,7 @@ await msq.connect(); // 自动加载 models/*.model.js
319
329
 
320
330
  // 1. 定义 Model(带 Schema 验证、Relations 和 Hooks)
321
331
  Model.define('users', {
322
- // 🔴 Schema 验证(默认启用,v1.0.7+)
332
+ // 🔴 Schema 验证(默认启用,v1.0.7+,基于 schema-dsl 库)
323
333
  schema: (dsl) => dsl({
324
334
  username: 'string:3-32!', // 必需,3-32 字符
325
335
  email: 'email!', // 必需,邮箱格式
@@ -414,7 +424,7 @@ await User.insertOne(doc, { skipValidation: true });
414
424
  ```
415
425
 
416
426
  **Model 层特性**:
417
- - ✅ **Schema 验证** - 自动验证数据格式(v1.0.7 默认启用)
427
+ - ✅ **Schema 验证** - 自动验证数据格式(基于 `schema-dsl` 库,v1.0.7 默认启用)
418
428
  - ✅ **自动加载** - 扫描目录自动加载 Model 文件(v1.0.7+)
419
429
  - ✅ **Populate** - 关联查询,支持 6 个方法(业界领先)
420
430
  - ✅ **Hooks** - 生命周期钩子(insert/update/delete/find)
@@ -504,6 +514,98 @@ await db.withTransaction(async (tx) => {
504
514
  });
505
515
  ```
506
516
 
517
+ ### 2.5 🔀 Saga 分布式事务 - 跨服务事务协调 🆕
518
+
519
+ ```javascript
520
+ // 定义 Saga(跨服务事务)
521
+ msq.defineSaga({
522
+ name: 'create-order-with-payment',
523
+ steps: [
524
+ {
525
+ name: 'create-order',
526
+ execute: async (ctx) => {
527
+ const order = await createOrder(ctx.data);
528
+ // ✅ 可以保存字符串、对象、数组等任何类型
529
+ ctx.set('order', order); // 保存完整对象
530
+ return order;
531
+ },
532
+ compensate: async (ctx) => {
533
+ const order = ctx.get('order');
534
+ await cancelOrder(order.id);
535
+ }
536
+ },
537
+ {
538
+ name: 'charge-payment',
539
+ execute: async (ctx) => {
540
+ const charge = await stripe.charges.create({...});
541
+ ctx.set('charge', charge); // 保存完整对象
542
+ return charge;
543
+ },
544
+ compensate: async (ctx) => {
545
+ const charge = ctx.get('charge');
546
+ await stripe.refunds.create({ charge: charge.id });
547
+ }
548
+ }
549
+ ]
550
+ });
551
+
552
+ // 执行 Saga(失败自动补偿)
553
+ const result = await msq.executeSaga('create-order-with-payment', data);
554
+ ```
555
+
556
+ **Saga 特性**:
557
+ - ✅ 跨服务事务协调
558
+ - ✅ 失败自动补偿(逆序执行)
559
+ - ✅ 支持 Redis 分布式(多进程共享)
560
+ - ✅ 无时间限制(突破 60秒限制)
561
+ - ✅ 详细日志(完整执行追踪)
562
+
563
+ [完整文档](./docs/saga-transaction.md)
564
+
565
+ ---
566
+
567
+ #### 🆕 Change Stream 数据同步 (v1.0.9)
568
+
569
+ **实时同步数据到备份库,基于 MongoDB Change Stream**
570
+
571
+ ```javascript
572
+ const msq = new MonSQLize({
573
+ type: 'mongodb',
574
+ config: {
575
+ uri: 'mongodb://localhost:27017/main',
576
+ replicaSet: 'rs0' // 🔴 必须:Change Stream 需要 Replica Set
577
+ },
578
+
579
+ // 🆕 同步配置
580
+ sync: {
581
+ enabled: true,
582
+ targets: [
583
+ {
584
+ name: 'backup-main',
585
+ uri: 'mongodb://backup:27017/backup',
586
+ collections: ['users', 'orders']
587
+ }
588
+ ]
589
+ }
590
+ });
591
+
592
+ await msq.connect();
593
+
594
+ // 正常使用,自动同步
595
+ await msq.collection('users').insertOne({ name: 'Alice' });
596
+ // ✅ 自动通过 Change Stream 同步到 backup-main
597
+ ```
598
+
599
+ **Change Stream 特性**:
600
+ - ✅ 实时同步(延迟 10-500ms)
601
+ - ✅ 断点续传(Resume Token)
602
+ - ✅ 多目标支持(多地容灾)
603
+ - ✅ 数据过滤和转换
604
+ - ✅ 自动重连和健康检查
605
+ - ✅ 主库影响 <2%(异步处理)
606
+
607
+ [完整文档](./docs/sync-backup.md)
608
+
507
609
  ### 3. 📦 便利方法 - 减少 60~80% 代码
508
610
 
509
611
  <table>
@@ -732,6 +834,8 @@ await db.close(); // 自动关闭SSH隧道
732
834
 
733
835
  monSQLize 提供了一个轻量级的 Model 层,让你可以像使用 ORM 一样定义数据模型,同时保持 MongoDB 的灵活性。
734
836
 
837
+ > **📦 依赖说明**: Model 层基于 `schema-dsl` 库实现 Schema 验证,已随 monsqlize 自动安装。
838
+
735
839
  ```javascript
736
840
  const { Model } = require('monsqlize');
737
841
 
@@ -1051,7 +1155,7 @@ import type { Collection, MonSQLizeConfig } from 'monsqlize';
1051
1155
  ✅ **CRUD 操作**
1052
1156
  - find / findOne
1053
1157
  - insertOne / insertMany
1054
- - updateOne / updateMany
1158
+ - updateOne / updateMany ⭐ (支持聚合管道 v1.0.8+)
1055
1159
  - deleteOne / deleteMany
1056
1160
  - replaceOne
1057
1161
  - findOneAndUpdate
@@ -1078,6 +1182,19 @@ import type { Collection, MonSQLizeConfig } from 'monsqlize';
1078
1182
 
1079
1183
  ### 🚀 增强功能
1080
1184
 
1185
+ ✅ **企业级多连接池** (v1.0.8+)
1186
+ - ConnectionPoolManager
1187
+ - 5种智能选择策略
1188
+ - 实时健康检查
1189
+ - 自动故障转移
1190
+ - 完整统计收集
1191
+
1192
+ ✅ **Saga 分布式事务** (v1.1.0 计划)
1193
+ - 跨服务事务(设计完成)
1194
+ - 自动补偿机制(设计完成)
1195
+ - 状态跟踪(设计完成)
1196
+ - 超时和重试(设计完成)
1197
+
1081
1198
  ✅ **智能缓存**
1082
1199
  - TTL 过期策略
1083
1200
  - LRU 淘汰策略