monsqlize 1.3.1 → 2.0.1

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.
Files changed (114) hide show
  1. package/CHANGELOG.md +506 -235
  2. package/LICENSE +201 -21
  3. package/README.md +542 -928
  4. package/changelogs/README.md +163 -0
  5. package/changelogs/v2.0.0.md +222 -0
  6. package/changelogs/v2.0.1.md +39 -0
  7. package/dist/cjs/index.cjs +10788 -0
  8. package/dist/cjs/mongodb/common/transaction-aware.cjs +10 -0
  9. package/dist/cjs/transaction/CacheLockManager.cjs +100 -0
  10. package/dist/cjs/transaction/Transaction.cjs +158 -0
  11. package/dist/cjs/transaction/TransactionManager.cjs +298 -0
  12. package/dist/esm/index.mjs +10838 -0
  13. package/dist/types/base.d.ts +81 -0
  14. package/dist/types/collection.d.ts +1031 -0
  15. package/dist/types/expression.d.ts +115 -0
  16. package/dist/types/index.d.ts +23 -0
  17. package/dist/types/lock.d.ts +74 -0
  18. package/dist/types/model.d.ts +530 -0
  19. package/dist/types/mongodb.d.ts +49 -0
  20. package/dist/types/monsqlize.d.ts +491 -0
  21. package/dist/types/pool.d.ts +84 -0
  22. package/dist/types/runtime.d.ts +362 -0
  23. package/dist/types/saga.d.ts +143 -0
  24. package/dist/types/slow-query-log.d.ts +126 -0
  25. package/dist/types/sync.d.ts +103 -0
  26. package/dist/types/transaction.d.ts +132 -0
  27. package/package.json +120 -117
  28. package/index.d.ts +0 -1289
  29. package/lib/cache.js +0 -491
  30. package/lib/common/cursor.js +0 -58
  31. package/lib/common/docs-urls.js +0 -72
  32. package/lib/common/index-options.js +0 -222
  33. package/lib/common/log.js +0 -60
  34. package/lib/common/namespace.js +0 -21
  35. package/lib/common/normalize.js +0 -33
  36. package/lib/common/page-result.js +0 -42
  37. package/lib/common/runner.js +0 -56
  38. package/lib/common/server-features.js +0 -231
  39. package/lib/common/shape-builders.js +0 -26
  40. package/lib/common/validation.js +0 -112
  41. package/lib/connect.js +0 -76
  42. package/lib/constants.js +0 -54
  43. package/lib/count-queue.js +0 -187
  44. package/lib/distributed-cache-invalidator.js +0 -259
  45. package/lib/errors.js +0 -167
  46. package/lib/index.js +0 -461
  47. package/lib/infrastructure/ssh-tunnel-ssh2.js +0 -211
  48. package/lib/infrastructure/ssh-tunnel.js +0 -40
  49. package/lib/infrastructure/uri-parser.js +0 -35
  50. package/lib/lock/Lock.js +0 -66
  51. package/lib/lock/errors.js +0 -27
  52. package/lib/lock/index.js +0 -12
  53. package/lib/logger.js +0 -224
  54. package/lib/model/examples/test.js +0 -114
  55. package/lib/mongodb/common/accessor-helpers.js +0 -58
  56. package/lib/mongodb/common/agg-pipeline.js +0 -32
  57. package/lib/mongodb/common/iid.js +0 -27
  58. package/lib/mongodb/common/lexicographic-expr.js +0 -52
  59. package/lib/mongodb/common/shape.js +0 -31
  60. package/lib/mongodb/common/sort.js +0 -38
  61. package/lib/mongodb/common/transaction-aware.js +0 -24
  62. package/lib/mongodb/connect.js +0 -233
  63. package/lib/mongodb/index.js +0 -591
  64. package/lib/mongodb/management/admin-ops.js +0 -199
  65. package/lib/mongodb/management/bookmark-ops.js +0 -166
  66. package/lib/mongodb/management/cache-ops.js +0 -49
  67. package/lib/mongodb/management/collection-ops.js +0 -386
  68. package/lib/mongodb/management/database-ops.js +0 -201
  69. package/lib/mongodb/management/index-ops.js +0 -474
  70. package/lib/mongodb/management/index.js +0 -16
  71. package/lib/mongodb/management/namespace.js +0 -30
  72. package/lib/mongodb/management/validation-ops.js +0 -267
  73. package/lib/mongodb/queries/aggregate.js +0 -142
  74. package/lib/mongodb/queries/chain.js +0 -630
  75. package/lib/mongodb/queries/count.js +0 -98
  76. package/lib/mongodb/queries/distinct.js +0 -77
  77. package/lib/mongodb/queries/find-and-count.js +0 -192
  78. package/lib/mongodb/queries/find-by-ids.js +0 -235
  79. package/lib/mongodb/queries/find-one-by-id.js +0 -170
  80. package/lib/mongodb/queries/find-one.js +0 -70
  81. package/lib/mongodb/queries/find-page.js +0 -577
  82. package/lib/mongodb/queries/find.js +0 -170
  83. package/lib/mongodb/queries/index.js +0 -50
  84. package/lib/mongodb/queries/watch.js +0 -537
  85. package/lib/mongodb/writes/delete-many.js +0 -190
  86. package/lib/mongodb/writes/delete-one.js +0 -182
  87. package/lib/mongodb/writes/find-one-and-delete.js +0 -202
  88. package/lib/mongodb/writes/find-one-and-replace.js +0 -238
  89. package/lib/mongodb/writes/find-one-and-update.js +0 -239
  90. package/lib/mongodb/writes/increment-one.js +0 -252
  91. package/lib/mongodb/writes/index.js +0 -41
  92. package/lib/mongodb/writes/insert-batch.js +0 -507
  93. package/lib/mongodb/writes/insert-many.js +0 -227
  94. package/lib/mongodb/writes/insert-one.js +0 -180
  95. package/lib/mongodb/writes/replace-one.js +0 -215
  96. package/lib/mongodb/writes/result-handler.js +0 -236
  97. package/lib/mongodb/writes/update-many.js +0 -221
  98. package/lib/mongodb/writes/update-one.js +0 -223
  99. package/lib/mongodb/writes/upsert-one.js +0 -206
  100. package/lib/multi-level-cache.js +0 -189
  101. package/lib/operators.js +0 -330
  102. package/lib/redis-cache-adapter.js +0 -237
  103. package/lib/slow-query-log/base-storage.js +0 -69
  104. package/lib/slow-query-log/batch-queue.js +0 -96
  105. package/lib/slow-query-log/config-manager.js +0 -195
  106. package/lib/slow-query-log/index.js +0 -237
  107. package/lib/slow-query-log/mongodb-storage.js +0 -323
  108. package/lib/slow-query-log/query-hash.js +0 -38
  109. package/lib/transaction/CacheLockManager.js +0 -161
  110. package/lib/transaction/DistributedCacheLockManager.js +0 -474
  111. package/lib/transaction/Transaction.js +0 -314
  112. package/lib/transaction/TransactionManager.js +0 -266
  113. package/lib/transaction/index.js +0 -10
  114. package/lib/utils/objectid-converter.js +0 -566
package/CHANGELOG.md CHANGED
@@ -1,235 +1,506 @@
1
- # 变更日志 (CHANGELOG)
2
-
3
- > **说明**: 版本摘要,详细需求见 [STATUS.md](STATUS.md)
4
- > **最后更新**: 2025-12-22
5
- > **文档版本**: 2.1(符合 AI 开发规范 v4.22)
6
-
7
- ---
8
-
9
- ## 版本概览
10
-
11
- | 版本 | 日期 | 变更摘要 | 详细 |
12
- |------|------|---------|------|
13
- | [v1.3.2](STATUS.md#v132) | 2025-12-22 | 🆕 SSH隧道支持 - 安全连接内网数据库 | [查看](STATUS.md#v132) |
14
- | [v1.3.1](STATUS.md#v131) | 2025-12-22 | 🆕 慢查询日志持久化存储 | [查看](STATUS.md#v131) |
15
- | [v1.6.0](STATUS.md#v160) | 2026-03-31 | Python SDK(跨语言客户端) | [查看](STATUS.md#v160) |
16
- | [v1.5.0](STATUS.md#v150) | 2026-02-28 | API服务化(RESTful API + 事务支持) | [查看](STATUS.md#v150) |
17
- | [v1.4.0](STATUS.md#v140) | 2026-01-15 | 短ID支持(Base62编码,缩短33%) | [查看](STATUS.md#v140) |
18
- | [v1.3.0](STATUS.md#v130) | 2025-12-12 | 自动 ObjectId 转换(查询+文档+聚合+配置+链式) | [查看](STATUS.md#v130) |
19
- | [v1.2.0](STATUS.md#v120) | 2025-12-15 | TypeScript增强 + 安全加固 + 工具链现代化 | [查看](STATUS.md#v120) |
20
- | [v1.1.0](STATUS.md#v110) | 2025-12-03 | 新增 Change Streams 实时监听功能(watch方法) | [查看](STATUS.md#v110) |
21
- | [v1.0.0](STATUS.md#v100) | 2025-12-03 | 正式发布,生产就绪,已发布到 npm | [查看](STATUS.md#v100) |
22
- | [v0.3.0](STATUS.md#v030) | 2025-12-02 | 新增完整的 Admin/Management 功能(18个方法) | [查看](STATUS.md#v030) |
23
-
24
- ---
25
-
26
- ## 🆕 v1.3.2 变更详情(2025-12-22)
27
-
28
- ### 新增功能
29
-
30
- 1. **SSH隧道支持** 🔐
31
- - 支持通过SSH隧道安全连接防火墙后的MongoDB
32
- - 支持密码认证和私钥认证
33
- - 自动管理隧道生命周期(connect建立,close关闭)
34
- - 基于ssh2库实现,完美跨平台(Windows/Linux/macOS
35
- - 开箱即用,零额外配置
36
- - 详见:[docs/ssh-tunnel.md](docs/ssh-tunnel.md)
37
-
38
- 2. **配置增强**
39
- - 新增`config.ssh`配置项(SSH隧道配置)
40
- - 支持`remoteHost`和`remotePort`指定MongoDB地址
41
- - 自动从URI解析目标地址
42
-
43
- ### 使用示例
44
-
45
- ```javascript
46
- const db = new MonSQLize({
47
- type: 'mongodb',
48
- config: {
49
- ssh: {
50
- host: 'bastion.example.com',
51
- username: 'deploy',
52
- password: 'your-password', // 或使用 privateKeyPath
53
- },
54
- uri: 'mongodb://user:pass@internal-mongo:27017/mydb',
55
- remoteHost: 'internal-mongo',
56
- remotePort: 27017
57
- }
58
- });
59
-
60
- await db.connect(); // 自动建立SSH隧道
61
- // 正常使用MongoDB
62
- await db.close(); // 自动关闭SSH隧道
63
- ```
64
-
65
- ### 技术亮点
66
-
67
- - **零学习成本**:与现有API无缝集成,无需学习新概念
68
- - **安全性强**:支持多种认证方式,推荐私钥认证
69
- - **扩展性好**:基础设施层独立,未来支持PostgreSQL/MySQL
70
- - **文档完整**:详细文档 + 7个示例 + 故障排查指南
71
-
72
- ### 核心文件
73
-
74
- - `lib/infrastructure/ssh-tunnel-ssh2.js` - SSH隧道实现(ssh2库)
75
- - `lib/infrastructure/ssh-tunnel.js` - 统一入口(工厂模式)
76
- - `lib/infrastructure/uri-parser.js` - URI解析器
77
- - `examples/ssh-tunnel.examples.js` - 7个完整示例
78
- - `docs/ssh-tunnel.md` - 详细使用文档
79
-
80
- ---
81
-
82
- ## 🆕 v1.3.1 变更详情(2025-12-22)
83
-
84
- ### 新增功能
85
-
86
- 1. **慢查询日志持久化存储** 🎯
87
- - 支持将慢查询日志自动保存到MongoDB
88
- - 方案B去重机制(基于queryHash聚合统计)
89
- - 批量写入队列(性能无损,<2ms额外开销)
90
- - 配置开箱即用(`slowQueryLog: true` 零配置)
91
- - 支持查询慢查询日志(`getSlowQueryLogs()`)
92
- - 详见:[plans/requirements/req-slow-query-log-storage-v1.3.md](plans/requirements/req-slow-query-log-storage-v1.3.md)
93
-
94
- 2. **存储层架构优化**
95
- - 适配器模式设计(支持多存储类型扩展)
96
- - 通用复用连接机制(MongoDB/PostgreSQL/MySQL都支持)
97
- - 智能配置管理(三层配置架构)
98
-
99
- ### 技术亮点
100
-
101
- - **性能优化**:异步批量写入,主查询额外开销<2ms
102
- - **存储可控**:TTL自动过期(默认7天),方案B去重节省1000倍存储
103
- - **扩展性强**:存储层与业务库解耦,未来可扩展PostgreSQL/MySQL/File存储
104
-
105
- ### 核心文件
106
-
107
- - `lib/slow-query-log/` - 慢查询日志模块(6个文件)
108
- - `examples/slow-query-log.examples.js` - 使用示例
109
- - `test/slow-query-log/` - 单元测试
110
-
111
- ---
112
-
113
- ## 变更统计
114
-
115
- | 版本系列 | 版本数 | 主要改进方向 |
116
- |---------|-------|------------|
117
- | v1.x | 7 | 核心功能完善、生产发布、实时监听、TypeScript增强、慢查询持久化、短ID支持、API服务化 |
118
- | v0.x | 1 | 基础功能开发、管理功能 |
119
-
120
- ---
121
-
122
- ## 维护说明
123
-
124
- ### 添加新版本的步骤
125
-
126
- 1. **创建需求文档**(如需要)
127
- ```bash
128
- cp plans/TEMPLATE.md plans/req-your-feature.md
129
- # 填充需求详细信息
130
- ```
131
-
132
- 2. **更新 STATUS.md**
133
- - 在"发布计划"表格添加新版本行
134
- - 添加版本章节(### vX.Y.Z)
135
- - 在版本表格添加需求行
136
- - 链接到 plans/ 文档(如有)
137
-
138
- 3. **更新 CHANGELOG.md**
139
- - 在"版本概览"表格最上方添加新行
140
- - 格式:`| [vX.Y.Z](STATUS.md#vxyz) | 日期 | 摘要 | [查看](STATUS.md#vxyz) |`
141
-
142
- 4. **提交变更**
143
- ```bash
144
- git add STATUS.md CHANGELOG.md plans/
145
- git commit -m "docs: 发布 vX.Y.Z"
146
- ```
147
-
148
- ### 版本号规则
149
-
150
- 遵循[语义化版本](https://semver.org/lang/zh-CN/)(Semantic Versioning):
151
-
152
- - **MAJOR** (x.0.0) - 不兼容的 API 变更
153
- - **MINOR** (0.x.0) - 向后兼容的新增功能
154
- - **PATCH** (0.0.x) - 向后兼容的问题修复
155
-
156
- 示例:
157
- - `1.0.0 1.0.1` - Bug 修复
158
- - `1.0.0 → 1.1.0` - 新功能
159
- - `1.0.0 2.0.0` - 破坏性变更
160
-
161
- ---
162
-
163
- ## 快速导航
164
-
165
- ### 按功能类型查找
166
-
167
- - **TypeScript增强**: [v1.2.0](STATUS.md#v120)
168
- - **安全加固**: [v1.2.0](STATUS.md#v120)
169
- - **工具链现代化**: [v1.2.0](STATUS.md#v120)
170
- - **实时监听**: [v1.1.0](STATUS.md#v110)
171
- - **生产发布**: [v1.0.0](STATUS.md#v100)
172
- - **管理功能**: [v0.3.0](STATUS.md#v030)
173
-
174
- ### 按变更类型查找
175
-
176
- - **新功能**: v1.1.0, v1.0.0, v0.3.0
177
- - **类型定义**: v1.2.0
178
- - **安全**: v1.2.0
179
- - **工具链**: v1.2.0
180
- - **性能优化**: v1.0.0
181
- - **Bug修复**: v0.3.0, v1.2.0
182
-
183
- ---
184
-
185
- ## 里程碑版本
186
-
187
- ### v1.0.0 - 正式发布 🎉
188
-
189
- **发布日期**: 2025-12-03
190
- **重要性**: ⭐⭐⭐⭐⭐
191
-
192
- **核心成就**:
193
- - ✅ 已发布到 npm
194
- - ✅ 生产就绪
195
- - ✅ 企业级质量(96/100 A+)
196
- - 1000+ 测试用例
197
- - ✅ 77%+ 测试覆盖率
198
-
199
- **详细信息**: [查看 STATUS.md](STATUS.md#v100)
200
-
201
- ---
202
-
203
- ## 详细变更文档
204
-
205
- > **说明**: 详细变更文档位于 `changelogs/` 目录(历史版本,保留供参考)
206
-
207
- ```
208
- changelogs/
209
- ├── TEMPLATE.md # 变更文档模板
210
- ├── v1.2.0.md # v1.2.0 详细变更
211
- ├── v1.1.0.md # v1.1.0 详细变更
212
- ├── v1.0.0.md # v1.0.0 详细变更
213
- └── v0.3.0.md # v0.3.0 详细变更
214
- ```
215
-
216
- **注意**:
217
- - changelogs/ 目录包含历史详细变更文档
218
- - 新版本应优先使用 plans/ 目录存储需求文档
219
- - changelogs/ 文档仅供参考,不再更新
220
-
221
- ---
222
-
223
- ## 相关文档
224
-
225
- - [STATUS.md](./STATUS.md) - 需求状态追踪
226
- - [plans/](./plans/README.md) - 需求详细文档
227
- - [README.md](./README.md) - 项目说明
228
- - [changelogs/](./changelogs/README.md) - 历史详细变更(供参考)
229
-
230
- ---
231
-
232
- **文档版本**: 2.0
233
- **最后更新**: 2025-12-12
234
- **格式标准**: AI 开发规范 v4.6 § 3.3
235
-
1
+ # CHANGELOG
2
+
3
+ > Summary index — current release details are packaged in [changelogs/v2.0.1.md](./changelogs/v2.0.1.md); historical details live in the repository changelog archive.
4
+ > **Last updated**: 2026-06-03
5
+
6
+ ---
7
+
8
+ ## Version Overview
9
+
10
+ | Version | Date | Summary | Details |
11
+ |---------|------|---------|---------|
12
+ | [v2.0.1](./changelogs/v2.0.1.md) | 2026-06-03 | Patch: model collection/pool compatibility, automatic-index task dedupe, runtime cache/pool v1 smooth-upgrade fixes, and current docs/types alignment | [View](./changelogs/v2.0.1.md) |
13
+ | [v2.0.0](./changelogs/v2.0.0.md) | 2026-06-01 | 🎉 **v2.0.0 — TypeScript rewrite**: full TypeScript source, cache-hub integration, schema-dsl `^2.0.3` TS dependency, Apache-2.0 licensing, English README, MultiLevel cache support, v1 API compat preserved, optimized npm artifact boundary without default sourcemaps, JSDoc coverage complete, `getPoolStats/getPoolHealth` keyed by pool name, v1 compat fixes included, workspace smooth-upgrade bridge validated for downstream consumers | [View](./changelogs/v2.0.0.md) |
14
+ | [v1.3.0](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.3.0.md) | 2026-04-27 | 🆕 **新功能**:链式池访问 API — `pool(name)` / `use(dbName)` / `scopedCollection()` / `scopedModel()` 四个公开方法,支持多连接池多数据库路由,connection 合并语义,TypeScript 类型签名完整覆盖 | [查看](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.3.0.md) |
15
+ | [v1.2.3](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.2.3.md) | 2026-04-26 | 🐛 **Bug Fix**:`model()` 方法修复注册 key 直接作为 MongoDB 集合名的问题,优先读 `definition.collection > definition.name`,注册 key 仅作 fallback,向后兼容 | [查看](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.2.3.md) |
16
+ | [v1.2.2](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.2.2.md) | 2026-04-24 | 🆕 **新功能**:Model 数据源绑定 `connection: { pool?, database? }` 支持 Model 绑定指定连接池和/或数据库,四种组合路由,向后兼容;🐛 **Bug Fix**:修复 `Model._clear()` 导致 `msq.model()` 实例缓存失效失效,populate 关系丢失问题 | [查看](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.2.2.md) |
17
+ | [v1.2.1](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.2.1.md) | 2026-04-13 | 🐛 **Bug 修复**:`msq.model()` 实例缓存 + 索引去重 + 死代码清理 + `types/monsqlize.ts` 补全 `model()` / `collection()` 类型 | [查看](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.2.1.md) |
18
+ | [v1.2.0](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.2.0.md) | 2026-04-13 | 🐛 **Bug 修复 + 新功能**:`findPage` 正式支持 `projection` 投影参数(修复静默忽略问题)+ 有效投影策略自动保护游标排序字段 + 8 个测试用例 | [查看](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.2.0.md) |
19
+ | [v1.1.9](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.1.9.md) | 2026-04-02 | 🚨 **P1 Bug 修复**:MultiLevelCache L2→L1 回填 TTL 缺失(null 永久驻留 L1)+ 新增 `backfillLocalTTL` 配置 + Redis `getWithTTL` 方法 + 14 个回归测试 | [查看](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.1.9.md) |
20
+ | [v1.1.8](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.1.8.md) | 2026-03-16 | 🆕 **新功能**:Model 热重载支持(`undefine()` + `redefine()` + `_loadModels` reload 模式)+ 22个测试 (100%通过) | [查看](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.1.8.md) |
21
+ | [v1.1.6](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.1.6.md) | 2026-02-11 | 🎉 **重大功能**:精准缓存失效机制 + 🚨 upsert 缓存失效 Bug 修复 + 36个测试 (100%通过) | [查看](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.1.6.md) |
22
+ | [v1.1.4](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.1.4.md) | 2026-02-09 | 🎉 重大功能:通用函数缓存 - 52个测试 (100%通过) + 多层缓存 delPattern 修复 | [查看](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.1.4.md) |
23
+ | [v1.1.3](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.1.3.md) | 2026-02-03 | 📚 文档完善:多连接池文档优化 + 健康检查详解 + 验证体系规范 | [查看](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.1.3.md) |
24
+ | [v1.1.2](#v112---日志优化) | 2026-01-27 | 🔧 优化:ObjectId 转换日志默认静默 + Saga 日志修复 | [查看](#v112---日志优化) |
25
+ | [v1.1.1](#v111---objectid-跨版本兼容) | 2026-01-27 | 🔧 Bug修复:新增跨版本 ObjectId 兼容性(支持 mongoose bson@4.x/5.x)| [查看](#v111---objectid-跨版本兼容) |
26
+ | [v1.1.0](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.1.0.md) | 2026-01-21 | 🎉 重大更新:新增49个操作符,实现100% MongoDB操作符支持(122/122)| [查看](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.1.0.md) |
27
+ | [v1.0.9](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.0.9.md) | 2026-01-19 | 🎉 重大功能:统一表达式系统 - 67个操作符 + 107个测试 (100%通过) | [查看](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.0.9.md) |
28
+ | [v1.0.8](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.0.8.md) | 2026-01-17 | 🎉 重大功能:多连接池 + Update 聚合管道 + Saga 事务 + Change Stream 同步 | [查看](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.0.8.md) |
29
+ | [v1.0.7](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.0.7.md) | 2026-01-09 | 🔧 依赖更新:schema-dsl@1.1.3 修复类型错误消息 + 测试用例 Schema 语法修复 | [查看](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.0.7.md) |
30
+ | [v1.0.6](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.0.6.md) | 2026-01-08 | 文档完善:新增 ObjectId 自动转换文档 + 验证所有 v1.3.0+ 功能文档 | [查看](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.0.6.md) |
31
+ | [v1.0.5](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.0.5.md) | 2026-01-08 | Schema 验证默认启用 + Model 自动加载机制 + 类型定义完善 | [查看](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.0.5.md) |
32
+ | [v1.0.4](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.0.4.md) | 2026-01-07 | 新功能:虚拟字段、默认值 + Bug 修复:嵌套 Populate + 测试改进 | [查看](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.0.4.md) |
33
+ | v1.0.3 | 2025-12-31 | 新增 Model 层(Schema 验证、自定义方法、生命周期钩子、自动时间戳) | 早期状态归档未随当前仓库保留 |
34
+ | v1.0.2 | 2025-12-30 | 新增批量操作方法(deleteBatch/updateBatch | 早期状态归档未随当前仓库保留 |
35
+ | v1.0.1 | 2025-12-29 | 稳定版本,生产就绪 | 早期状态归档未随当前仓库保留 |
36
+ | [v1.0.0](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.0.0.md) | 2025-12-03 | 正式发布,生产就绪,已发布到 npm | [查看](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.0.0.md) |
37
+
38
+ ---
39
+
40
+ ## 🚨 重要更新
41
+
42
+ ### v1.1.6 - 精准缓存失效 + 严重 Bug 修复 🎉🔴
43
+
44
+ **发布日期**: 2026-02-11
45
+ **版本类型**: Feature + Critical Bug Fix
46
+ **重要性**: ⭐⭐⭐⭐⭐ **强烈推荐立即升级**
47
+
48
+ #### 🎉 新功能:精准缓存失效机制
49
+
50
+ **核心特性**:
51
+ - ✅ **精准失效**: 只清除受影响查询的缓存(vs 集合级别失效)
52
+ - **配置灵活**: 实例级别 + 查询级别配置,查询级别优先
53
+ - ✅ **智能跳过**: 自动跳过复杂查询($or、$expr、$regex等)
54
+ - ✅ **性能优化**: 批量删除、命名空间过滤、零拷贝
55
+
56
+ **性能提升**:
57
+ | 指标 | 旧方式 | 新方式 | 提升 |
58
+ |------|--------|--------|------|
59
+ | 缓存失效数量 | 100个 | ~1个 | ↓ 99% |
60
+ | 缓存命中率 | 随机 | 95%+ | ↑ 显著 |
61
+ | 数据库查询 | 100次 | 5次 | ↓ 95% |
62
+
63
+ **配置示例**:
64
+ ```javascript
65
+ // 实例配置(默认 false)
66
+ const msq = new MonSQLize({
67
+ cache: { autoInvalidate: false }
68
+ });
69
+
70
+ // 查询配置(优先)
71
+ await collection('users').find(
72
+ { status: 'active' },
73
+ { cache: 60000, autoInvalidate: true }
74
+ );
75
+ ```
76
+
77
+ **支持的操作符**: 等值、$in、$gt/$gte/$lt/$lte、$ne、$exists
78
+ **自动跳过**: $or、$nor、$expr、$where、$text、$regex
79
+
80
+ **已集成**: insertOne/Many, updateOne/Many, deleteOne/Many, upsertOne (7个写操作)
81
+
82
+ **ObjectId 完全支持** 🆕:
83
+ - ✅ 自动规范化 ObjectId 为字符串(缓存键层面)
84
+ - ✅ 缓存键 100% 一致性保证
85
+ - ✅ 支持 `_id` 和所有 ObjectId 字段
86
+ - 递归处理嵌套结构和数组
87
+ - ✅ 精准失效对 ObjectId 字段 100% 可靠
88
+
89
+ **测试覆盖**: 36个单元测试,100%通过,≥95%覆盖率
90
+
91
+ #### 🚨 修复的严重问题
92
+
93
+ **问题描述**:
94
+ - `updateOne({ upsert: true })`、`updateMany({ upsert: true })`、`replaceOne({ upsert: true })` 在**插入新文档时不会失效缓存**
95
+ - 导致后续查询返回**过时数据**(缓存中是空数组,但数据库中已有新数据)
96
+ - **影响**: 严重的数据一致性问题
97
+
98
+ **影响场景**:
99
+ - ❌ 用户注册后看不到新用户
100
+ - ❌ 订单创建后看不到新订单
101
+ - ❌ count/distinct 查询返回错误的数量
102
+ - ❌ 统计数据不准确
103
+
104
+ **修复的方法**:
105
+ 1. ✅ **updateOne** - 修复缓存失效条件 (第 146 行)
106
+ 2. ✅ **updateMany** - 修复缓存失效条件 (第 146 行)
107
+ 3. **replaceOne** - 修复缓存失效条件 (第 113 行,新发现)
108
+
109
+ **测试验证**:
110
+ - ✅ 新增 11 个测试用例,100% 通过
111
+ - ✅ 三轮彻底验证,所有场景覆盖
112
+
113
+ **升级建议**:
114
+ ```bash
115
+ # 如果你使用了 upsert,请立即升级
116
+ npm update monsqlize
117
+ ```
118
+
119
+ 📖 **详细分析**: 历史验证报告未作为当前 npm 包资产发布;如需追溯,请以仓库归档或项目内部报告为准。
120
+
121
+ #### 其他改进
122
+
123
+ - ✅ function-cache 性能优化 (23-45% 提升)
124
+ - ✅ 新增 17 个复杂数据类型测试
125
+ - ✅ 代码质量提升 (A → A+)
126
+ - ✅ 全局 Map 监控机制
127
+ - ✅ 错误日志记录增强
128
+
129
+ ---
130
+
131
+ ## 变更统计
132
+
133
+ | 版本系列 | 版本数 | 主要改进方向 |
134
+ |---------|-------|------------|
135
+ | v1.1.x | 5 | **数据一致性修复** 🆕、通用函数缓存、文档完善、日志优化、100% MongoDB 操作符 |
136
+ | v1.0.x | 10 | 企业级功能、分布式支持、Model 层完善、Schema 验证、统一表达式系统 |
137
+
138
+ ---
139
+
140
+ ## 文档与验证改进
141
+
142
+ ### v1.1.3 - 文档完善与验证体系 📚
143
+
144
+ **发布日期**: 2026-02-03
145
+ **版本类型**: 文档优化 + 验证体系完善
146
+ **重要性**: ⭐⭐⭐⭐
147
+
148
+ #### 核心改进
149
+
150
+ **多连接池文档优化**:
151
+ - ✅ 修复代码实现(ConnectionPoolManager 导出、selectPool 返回值完整)
152
+ - 验证 100% 通过(76 项功能验证)
153
+ - 文档精简(2082 → 1970 行,-5%)
154
+ - 目录格式统一、删除重复内容
155
+
156
+ **健康检查机制详解**:
157
+ - 新增文档 `docs/multi-pool-health-check.md`
158
+ - 详细说明工作原理、问题发现、问题处理
159
+ - 提供 3 种运维通知方式(日志、监控、事件)
160
+ - ✅ 集成方案(Prometheus、企业微信/钉钉、邮件)
161
+ - ✅ 完整的生产环境告警系统代码
162
+
163
+ **验证体系规范**:
164
+ - ✅ 文档规范说明(目录格式、内容规范、禁止内容)
165
+ - ✅ 文档更新流程(4 步)
166
+ - ✅ 引用关系规范(建立原则、禁止情况、判断流程)
167
+ - 验证通过标准(6 项)
168
+
169
+ #### 影响范围
170
+
171
+ - **文档文件**: 3 个(multi-pool.md、multi-pool-health-check.md、README.md
172
+ - **代码文件**: 2 个(lib/index.js、ConnectionPoolManager.js)
173
+ - **验证文件**: 5 个(清单、脚本、报告)
174
+ - **规范文件**: 1 个(validation/README.md)
175
+
176
+ #### 升级说明
177
+
178
+ **无破坏性变更**,现有代码无需修改:
179
+ ```bash
180
+ npm update monsqlize
181
+ ```
182
+
183
+ 📖 **详细变更**: [查看完整变更日志](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.1.3.md)
184
+
185
+ ---
186
+
187
+ ## 里程碑版本
188
+
189
+ ### v1.1.2 - 日志优化 🔧
190
+
191
+ **发布日期**: 2026-01-27
192
+ **重要性**: ⭐⭐⭐
193
+
194
+ **优化内容**:
195
+
196
+ 1. **ObjectId 转换日志默认静默**
197
+ - ✅ **默认完全静默**: 不输出任何 ObjectId 转换日志
198
+ - ✅ **用户反馈驱动**: 根据用户反馈,转换日志无实际作用
199
+ - **可选启用**: 支持按需启用摘要或详细日志
200
+ - ✅ **生产友好**: 减少日志量,避免日志污染
201
+
202
+ 2. **Saga 日志修复**
203
+ - ✅ **修复误导性日志**: 正确区分内存缓存和 Redis 缓存
204
+ - ✅ **准确识别**: 通过检测 `cache.keys` 和 `cache.publish` 方法识别 Redis
205
+ - **日志准确**: 内存缓存显示"使用内存缓存",Redis 显示"使用 Redis 存储"
206
+
207
+ **配置选项**:
208
+
209
+ ```javascript
210
+ // 默认配置(完全静默)
211
+ const msq = new MonSQLize({
212
+ type: 'mongodb',
213
+ config: { uri: 'mongodb://localhost:27017' }
214
+ });
215
+ // ✅ 无任何 ObjectId 转换日志
216
+
217
+ // 启用摘要日志(调试用)
218
+ const msq = new MonSQLize({
219
+ type: 'mongodb',
220
+ config: { uri: 'mongodb://localhost:27017' },
221
+ autoConvertObjectId: {
222
+ silent: false // 关闭静默
223
+ }
224
+ });
225
+ // 输出:[DEBUG] Converted 15 cross-version ObjectIds
226
+
227
+ // 启用详细日志(深度调试)
228
+ const msq = new MonSQLize({
229
+ type: 'mongodb',
230
+ config: { uri: 'mongodb://localhost:27017' },
231
+ autoConvertObjectId: {
232
+ silent: false,
233
+ verbose: true
234
+ }
235
+ });
236
+ // 输出:每个 ObjectId 都有一条日志
237
+ ```
238
+
239
+ **效果对比**:
240
+
241
+ | 模式 | silent | verbose | 日志输出 | 适用场景 |
242
+ |------|--------|---------|---------|---------|
243
+ | **静默模式**(默认)✅ | `true` | - | 无 | 生产环境、日常开发 |
244
+ | **摘要模式** | `false` | `false` | 1条摘要 | 需要了解转换情况时 |
245
+ | **详细模式** | `false` | `true` | N条详情 | 深度调试、排查问题 |
246
+
247
+ **修改的文件**:
248
+ - `lib/utils/objectid-converter.js`: 添加 `silent` 配置,默认 `true`
249
+ - `lib/saga/SagaOrchestrator.js`: 修复 Redis 识别逻辑
250
+
251
+ **详细文档**:
252
+ - [ObjectId 日志配置](https://github.com/vextjs/monSQLize/blob/main/docs/objectid-logging-optimization.md)
253
+ - [FAQ - Q3: 如何关闭日志](https://github.com/vextjs/monSQLize/blob/main/docs/objectid-cross-version-faq.md#q3)
254
+
255
+ ---
256
+
257
+ ### v1.1.1 - ObjectId 跨版本兼容 🔧
258
+
259
+ **发布日期**: 2026-01-27
260
+ **重要性**: ⭐⭐⭐⭐
261
+
262
+ **问题背景**:
263
+ - 混用 mongoose (bson@4.x/5.x) 和 monSQLize (bson@6.x) 时出现版本冲突
264
+ - 错误信息:`Unsupported BSON version, bson types must be from bson 6.x.x`
265
+ - 跨服务数据传递时 ObjectId 实例无法被 mongodb@6.x 驱动识别
266
+
267
+ **解决方案**:
268
+ - ✅ **自动跨版本转换**: 检测并转换来自其他 BSON 版本的 ObjectId
269
+ - ✅ **递归处理**: 自动处理嵌套对象和数组中的 ObjectId
270
+ - ✅ **性能优化**: 无需转换时返回原对象(零拷贝)
271
+ - ✅ **错误降级**: 转换失败时返回原值,不影响其他字段
272
+ - ✅ **调试支持**: 提供详细的转换日志
273
+
274
+ **兼容性**:
275
+ | BSON 版本 | mongoose 版本 | 支持状态 |
276
+ |-----------|--------------|---------|
277
+ | bson@4.x | mongoose@5.x | ✅ 完全支持 |
278
+ | bson@5.x | mongoose@6.x | ✅ 完全支持 |
279
+ | bson@6.x | mongoose@7.x | ✅ 原生支持 |
280
+
281
+ **测试覆盖**:
282
+ - 🏆 **测试数量**: 17个测试用例
283
+ - 🏆 **通过率**: 100% (17/17通过)
284
+ - 🏆 **覆盖场景**: 基础转换、嵌套对象、数组、边界情况、错误处理
285
+
286
+ **使用示例**:
287
+ ```javascript
288
+ // 从 mongoose 获取数据(包含 bson@4.x/5.x 的 ObjectId)
289
+ const dataFromMongoose = await MongooseModel.findOne({ ... }).lean();
290
+
291
+ // 直接插入,monSQLize 自动转换 ObjectId
292
+ const result = await msq.collection('orders').insertOne(dataFromMongoose);
293
+ // ✅ 成功:自动将旧版本 ObjectId 转换为 bson@6.x 版本
294
+ ```
295
+
296
+ **详细文档**: [查看 docs/objectid-cross-version.md](https://github.com/vextjs/monSQLize/blob/main/docs/objectid-cross-version.md)
297
+
298
+ ---
299
+
300
+ ### v1.0.9 - 统一表达式系统 🎉
301
+
302
+ **发布日期**: 2026-01-19
303
+ **重要性**: ⭐⭐⭐⭐⭐
304
+
305
+ **核心功能**:
306
+ - ✅ **67个统一表达式操作符**: 完整实现阶段1 (43个) + 阶段2 (24个)
307
+ - ✅ **上下文感知编译**: 自动检测 $match/$project/$group 上下文
308
+ - ✅ **递归函数调用**: 支持任意深度的函数嵌套
309
+ - ✅ **Lambda表达式**: FILTER/MAP 完整支持
310
+ - ✅ **高性能缓存**: LRU缓存,>90%命中率
311
+ - ✅ **100%向后兼容**: 无破坏性变更
312
+
313
+ **测试覆盖**:
314
+ - 🏆 **测试数量**: 107个测试用例 (新增19个边界测试)
315
+ - 🏆 **通过率**: 100% (107/107通过)
316
+ - 🏆 **边界覆盖**: 95%+ 边界情况覆盖
317
+ - 🏆 **质量评级**: A+ (98.8%完成度)
318
+
319
+ **文档更新**:
320
+ - 📚 **聚合文档更新**: aggregate.md 新增统一表达式章节
321
+ - 📚 **完整实施报告**: 15+份详细报告
322
+ - 📚 **质量分析**: 全面质量检查和验证
323
+
324
+ ### v1.0.8 - 企业级功能升级 🎉
325
+
326
+ **发布日期**: 2026-01-16
327
+ **重要性**: ⭐⭐⭐⭐⭐
328
+
329
+ **核心功能**:
330
+ - ✅ **企业级多连接池管理**: 支持 primary、secondary、analytics、custom 角色
331
+ - ✅ **智能选择策略**: auto、roundRobin、weighted、leastConnections、manual
332
+ - ✅ **健康检查机制**: 自动故障检测和恢复,支持自定义检查间隔和重试次数
333
+ - ✅ **Update 聚合管道**: updateOne/updateMany 支持聚合管道语法
334
+ - ✅ **Saga 分布式事务**: 完整的补偿机制,支持跨服务事务
335
+
336
+ **质量提升**:
337
+ - 🏆 **测试覆盖率**: 90.77% (从 37.8% 提升,+53%)
338
+ - 🏆 **测试数量**: 400+个测试用例 (增长 4000%)
339
+ - 🏆 **函数覆盖率**: 95.23%
340
+ - 🏆 **核心功能**: 100% 测试覆盖
341
+ - 🏆 **行业领先**: 超过 85% 的开源项目
342
+
343
+ **重大改进**:
344
+ 1. **多连接池架构**:
345
+ - ConnectionPoolManager: 统一管理多个连接池
346
+ - HealthChecker: 实时健康监控
347
+ - PoolSelector: 5种智能选择策略
348
+ - PoolStats: 完整的统计收集
349
+
350
+ 2. **Update 聚合管道**:
351
+ - 支持字段间计算 (`$add`、`$multiply`、`$subtract`)
352
+ - 条件赋值 (`$cond`、`$ifNull`)
353
+ - 多阶段转换 (`$concat`、`$toLower`、`$toUpper`)
354
+ - 完全兼容 MongoDB 4.2+ 语法
355
+
356
+ 3. **Saga 分布式事务**:
357
+ - 自动补偿机制
358
+ - 事务状态跟踪
359
+ - 支持超时和重试
360
+ - 完整的错误处理
361
+
362
+ **详细信息**: [查看 changelogs/v1.0.8.md](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.0.8.md)
363
+
364
+ ---
365
+
366
+ ### v1.0.7 - 依赖更新与测试修复 🔧
367
+
368
+ **发布日期**: 2026-01-09
369
+ **重要性**: ⭐⭐⭐
370
+
371
+ **核心改进**:
372
+ - ✅ 升级 schema-dsl 到 v1.1.3(修复类型错误消息模板变量未替换 bug)
373
+ - ✅ 修复测试用例中错误的 Schema 语法(17处)
374
+ - ✅ 所有测试通过(38/38 测试套件,100%)
375
+ - ✅ 将 schema-dsl 从 devDependencies 移至 dependencies(Model 层运行时依赖)
376
+
377
+ **详细信息**: [查看 changelogs/v1.0.7.md](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.0.7.md)
378
+
379
+ ---
380
+
381
+ ### v1.0.6 - 文档完善 📚
382
+
383
+ **发布日期**: 2026-01-08
384
+ **重要性**: ⭐⭐⭐
385
+
386
+ **核心成就**:
387
+ - ✅ 文档完整性达到 100%
388
+ - ✅ 新增 ObjectId 自动转换完整文档(600行)
389
+ - ✅ 验证所有 v1.3.0+ 功能都有文档
390
+
391
+ **详细信息**: [查看 changelogs/v1.0.6.md](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.0.6.md)
392
+
393
+ ---
394
+
395
+ ### v1.0.5 - Model 层易用性提升 🚀
396
+
397
+ **发布日期**: 2026-01-08
398
+ **重要性**: ⭐⭐⭐⭐
399
+
400
+ **核心特性**:
401
+ - ✅ Schema 验证默认启用(提升数据质量)
402
+ - ✅ Model 自动加载机制(减少样板代码)
403
+ - ✅ 类型定义完善
404
+
405
+ **详细信息**: [查看 changelogs/v1.0.5.md](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.0.5.md)
406
+
407
+ ---
408
+
409
+ ### v1.0.4 - 虚拟字段与 Bug 修复 ✨
410
+
411
+ **发布日期**: 2026-01-07
412
+ **重要性**: ⭐⭐⭐⭐
413
+
414
+ **核心特性**:
415
+ - ✅ 虚拟字段(计算属性)
416
+ - ✅ 默认值(插入时自动填充)
417
+ - ✅ 嵌套 Populate Bug 修复
418
+
419
+ **详细信息**: [查看 changelogs/v1.0.4.md](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.0.4.md)
420
+
421
+ ---
422
+
423
+ ### v1.0.0 - 正式发布 🎉
424
+
425
+ **发布日期**: 2025-12-03
426
+ **重要性**: ⭐⭐⭐⭐⭐
427
+
428
+ **核心成就**:
429
+ - ✅ 已发布到 npm
430
+ - ✅ 生产就绪
431
+ - ✅ 企业级质量(96/100 A+)
432
+ - ✅ 1000+ 测试用例
433
+ - ✅ 77%+ 测试覆盖率
434
+
435
+ **详细信息**: [查看 changelogs/v1.0.0.md](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.0.0.md)
436
+
437
+ ---
438
+
439
+ ## 详细变更文档
440
+
441
+ > **说明**: 详细变更文档位于 `changelogs/` 目录
442
+
443
+ ```
444
+ changelogs/
445
+ ├── README.md # 变更文档说明
446
+ ├── TEMPLATE.md # 变更文档模板
447
+ ├── v2.0.1.md # 当前发布详细变更
448
+ ├── v2.0.0.md # v2 TypeScript 重写发布详细变更
449
+ └── v1.x.y.md # 历史版本详细变更(仓库归档)
450
+ ```
451
+
452
+ **注意**:
453
+ - `changelogs/` 目录包含所有版本的详细变更文档
454
+ - 本文件(CHANGELOG.md)仅提供版本概览和里程碑摘要
455
+ - 早期 `STATUS.md` 状态看板已不再作为当前仓库和 npm 包资产保留。
456
+
457
+ ---
458
+
459
+ ## 维护说明
460
+
461
+ ### 添加新版本的步骤
462
+
463
+ 1. **创建详细变更文档**
464
+ ```bash
465
+ cp changelogs/TEMPLATE.md changelogs/vX.Y.Z.md
466
+ # 填充详细变更信息
467
+ ```
468
+
469
+ 2. **更新 CHANGELOG.md**(本文件)
470
+ - 在"版本概览"表格最上方添加新行
471
+ - 格式:版本列和详情列都指向 `./changelogs/vX.Y.Z.md`,当前 npm 包默认只随带当前发布版本的详细文档。
472
+
473
+ 3. **更新状态看板**(如项目重新启用)
474
+ - 当前仓库未保留 `STATUS.md` 作为发布资产;如后续恢复状态看板,再同步版本章节和需求状态。
475
+
476
+ 4. **提交变更**
477
+ ```bash
478
+ git add CHANGELOG.md changelogs/vX.Y.Z.md
479
+ git commit -m "docs: 发布 vX.Y.Z"
480
+ ```
481
+
482
+ ### 版本号规则
483
+
484
+ 遵循[语义化版本](https://semver.org/lang/zh-CN/)(Semantic Versioning):
485
+
486
+ - **MAJOR** (x.0.0) - 不兼容的 API 变更
487
+ - **MINOR** (0.x.0) - 向后兼容的新增功能
488
+ - **PATCH** (0.0.x) - 向后兼容的问题修复
489
+
490
+ 示例:
491
+ - `1.0.0 → 1.0.1` - Bug 修复
492
+ - `1.0.0 → 1.1.0` - 新功能
493
+ - `1.0.0 → 2.0.0` - 破坏性变更
494
+
495
+ ---
496
+
497
+ ## 相关文档
498
+
499
+ - [changelogs/v2.0.1.md](./changelogs/v2.0.1.md) - 当前发布详细变更文档
500
+ - [README.md](./README.md) - 项目说明
501
+ - [docs/](https://github.com/vextjs/monSQLize/blob/main/docs/index.md) - API 文档
502
+
503
+ ---
504
+
505
+ **最后更新**: 2026-06-03
506
+