monsqlize 2.0.0 → 2.0.2

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,14 +1,16 @@
1
- # CHANGELOG
2
-
3
- > Summary index — current release details are packaged in [changelogs/v2.0.0.md](./changelogs/v2.0.0.md); historical details live in the repository changelog archive.
4
- > **Last updated**: 2026-06-01
5
-
6
- ---
7
-
8
- ## Version Overview
9
-
10
- | Version | Date | Summary | Details |
11
- |---------|------|---------|---------|
1
+ # CHANGELOG
2
+
3
+ > Summary index — current release details are packaged in [changelogs/v2.0.2.md](./changelogs/v2.0.2.md); historical details live in the repository changelog archive.
4
+ > **Last updated**: 2026-06-09
5
+
6
+ ---
7
+
8
+ ## Version Overview
9
+
10
+ | Version | Date | Summary | Details |
11
+ |---------|------|---------|---------|
12
+ | [v2.0.2](./changelogs/v2.0.2.md) | 2026-06-09 | Patch: direct runtime, optional and development dependencies pinned to exact versions for deterministic consumer installs | [View](./changelogs/v2.0.2.md) |
13
+ | [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) |
12
14
  | [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) |
13
15
  | [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) |
14
16
  | [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) |
@@ -20,8 +22,8 @@
20
22
  | [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) |
21
23
  | [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) |
22
24
  | [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) |
23
- | [v1.1.2](#v112---日志优化) | 2026-01-27 | 🔧 优化:ObjectId 转换日志默认静默 + Saga 日志修复 | [查看](#v112---日志优化) |
24
- | [v1.1.1](#v111---objectid-跨版本兼容) | 2026-01-27 | 🔧 Bug修复:新增跨版本 ObjectId 兼容性(支持 mongoose bson@4.x/5.x)| [查看](#v111---objectid-跨版本兼容) |
25
+ | [v1.1.2](#v112---日志优化) | 2026-01-27 | 🔧 优化:ObjectId 转换日志默认静默 + Saga 日志修复 | [查看](#v112---日志优化) |
26
+ | [v1.1.1](#v111---objectid-跨版本兼容) | 2026-01-27 | 🔧 Bug修复:新增跨版本 ObjectId 兼容性(支持 mongoose bson@4.x/5.x)| [查看](#v111---objectid-跨版本兼容) |
25
27
  | [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) |
26
28
  | [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) |
27
29
  | [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) |
@@ -33,472 +35,473 @@
33
35
  | v1.0.2 | 2025-12-30 | 新增批量操作方法(deleteBatch/updateBatch) | 早期状态归档未随当前仓库保留 |
34
36
  | v1.0.1 | 2025-12-29 | 稳定版本,生产就绪 | 早期状态归档未随当前仓库保留 |
35
37
  | [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) |
36
-
37
- ---
38
-
39
- ## 🚨 重要更新
40
-
41
- ### v1.1.6 - 精准缓存失效 + 严重 Bug 修复 🎉🔴
42
-
43
- **发布日期**: 2026-02-11
44
- **版本类型**: Feature + Critical Bug Fix
45
- **重要性**: ⭐⭐⭐⭐⭐ **强烈推荐立即升级**
46
-
47
- #### 🎉 新功能:精准缓存失效机制
48
-
49
- **核心特性**:
50
- - ✅ **精准失效**: 只清除受影响查询的缓存(vs 集合级别失效)
51
- - ✅ **配置灵活**: 实例级别 + 查询级别配置,查询级别优先
52
- - ✅ **智能跳过**: 自动跳过复杂查询($or、$expr、$regex等)
53
- - ✅ **性能优化**: 批量删除、命名空间过滤、零拷贝
54
-
55
- **性能提升**:
56
- | 指标 | 旧方式 | 新方式 | 提升 |
57
- |------|--------|--------|------|
58
- | 缓存失效数量 | 100个 | ~1个 | ↓ 99% |
59
- | 缓存命中率 | 随机 | 95%+ | ↑ 显著 |
60
- | 数据库查询 | 100次 | 5次 | ↓ 95% |
61
-
62
- **配置示例**:
63
- ```javascript
64
- // 实例配置(默认 false)
65
- const msq = new MonSQLize({
66
- cache: { autoInvalidate: false }
67
- });
68
-
69
- // 查询配置(优先)
70
- await collection('users').find(
71
- { status: 'active' },
72
- { cache: 60000, autoInvalidate: true }
73
- );
74
- ```
75
-
76
- **支持的操作符**: 等值、$in、$gt/$gte/$lt/$lte、$ne、$exists
77
- **自动跳过**: $or、$nor、$expr、$where、$text、$regex
78
-
79
- **已集成**: insertOne/Many, updateOne/Many, deleteOne/Many, upsertOne (7个写操作)
80
-
81
- **ObjectId 完全支持** 🆕:
82
- - ✅ 自动规范化 ObjectId 为字符串(缓存键层面)
83
- - ✅ 缓存键 100% 一致性保证
84
- - ✅ 支持 `_id` 和所有 ObjectId 字段
85
- - ✅ 递归处理嵌套结构和数组
86
- - ✅ 精准失效对 ObjectId 字段 100% 可靠
87
-
88
- **测试覆盖**: 36个单元测试,100%通过,≥95%覆盖率
89
-
90
- #### 🚨 修复的严重问题
91
-
92
- **问题描述**:
93
- - `updateOne({ upsert: true })`、`updateMany({ upsert: true })`、`replaceOne({ upsert: true })` 在**插入新文档时不会失效缓存**
94
- - 导致后续查询返回**过时数据**(缓存中是空数组,但数据库中已有新数据)
95
- - **影响**: 严重的数据一致性问题
96
-
97
- **影响场景**:
98
- - ❌ 用户注册后看不到新用户
99
- - ❌ 订单创建后看不到新订单
100
- - ❌ count/distinct 查询返回错误的数量
101
- - ❌ 统计数据不准确
102
-
103
- **修复的方法**:
104
- 1. ✅ **updateOne** - 修复缓存失效条件 (第 146 行)
105
- 2. ✅ **updateMany** - 修复缓存失效条件 (第 146 行)
106
- 3. ✅ **replaceOne** - 修复缓存失效条件 (第 113 行,新发现)
107
-
108
- **测试验证**:
109
- - ✅ 新增 11 个测试用例,100% 通过
110
- - ✅ 三轮彻底验证,所有场景覆盖
111
-
112
- **升级建议**:
113
- ```bash
114
- # 如果你使用了 upsert,请立即升级
115
- npm update monsqlize
116
- ```
117
-
38
+
39
+ ---
40
+
41
+ ## 🚨 重要更新
42
+
43
+ ### v1.1.6 - 精准缓存失效 + 严重 Bug 修复 🎉🔴
44
+
45
+ **发布日期**: 2026-02-11
46
+ **版本类型**: Feature + Critical Bug Fix
47
+ **重要性**: ⭐⭐⭐⭐⭐ **强烈推荐立即升级**
48
+
49
+ #### 🎉 新功能:精准缓存失效机制
50
+
51
+ **核心特性**:
52
+ - ✅ **精准失效**: 只清除受影响查询的缓存(vs 集合级别失效)
53
+ - ✅ **配置灵活**: 实例级别 + 查询级别配置,查询级别优先
54
+ - ✅ **智能跳过**: 自动跳过复杂查询($or、$expr、$regex等)
55
+ - ✅ **性能优化**: 批量删除、命名空间过滤、零拷贝
56
+
57
+ **性能提升**:
58
+ | 指标 | 旧方式 | 新方式 | 提升 |
59
+ |------|--------|--------|------|
60
+ | 缓存失效数量 | 100个 | ~1个 | ↓ 99% |
61
+ | 缓存命中率 | 随机 | 95%+ | ↑ 显著 |
62
+ | 数据库查询 | 100次 | 5次 | ↓ 95% |
63
+
64
+ **配置示例**:
65
+ ```javascript
66
+ // 实例配置(默认 false)
67
+ const msq = new MonSQLize({
68
+ cache: { autoInvalidate: false }
69
+ });
70
+
71
+ // 查询配置(优先)
72
+ await collection('users').find(
73
+ { status: 'active' },
74
+ { cache: 60000, autoInvalidate: true }
75
+ );
76
+ ```
77
+
78
+ **支持的操作符**: 等值、$in、$gt/$gte/$lt/$lte、$ne、$exists
79
+ **自动跳过**: $or、$nor、$expr、$where、$text、$regex
80
+
81
+ **已集成**: insertOne/Many, updateOne/Many, deleteOne/Many, upsertOne (7个写操作)
82
+
83
+ **ObjectId 完全支持** 🆕:
84
+ - ✅ 自动规范化 ObjectId 为字符串(缓存键层面)
85
+ - ✅ 缓存键 100% 一致性保证
86
+ - ✅ 支持 `_id` 和所有 ObjectId 字段
87
+ - ✅ 递归处理嵌套结构和数组
88
+ - ✅ 精准失效对 ObjectId 字段 100% 可靠
89
+
90
+ **测试覆盖**: 36个单元测试,100%通过,≥95%覆盖率
91
+
92
+ #### 🚨 修复的严重问题
93
+
94
+ **问题描述**:
95
+ - `updateOne({ upsert: true })`、`updateMany({ upsert: true })`、`replaceOne({ upsert: true })` 在**插入新文档时不会失效缓存**
96
+ - 导致后续查询返回**过时数据**(缓存中是空数组,但数据库中已有新数据)
97
+ - **影响**: 严重的数据一致性问题
98
+
99
+ **影响场景**:
100
+ - ❌ 用户注册后看不到新用户
101
+ - ❌ 订单创建后看不到新订单
102
+ - ❌ count/distinct 查询返回错误的数量
103
+ - ❌ 统计数据不准确
104
+
105
+ **修复的方法**:
106
+ 1. ✅ **updateOne** - 修复缓存失效条件 (第 146 行)
107
+ 2. ✅ **updateMany** - 修复缓存失效条件 (第 146 行)
108
+ 3. ✅ **replaceOne** - 修复缓存失效条件 (第 113 行,新发现)
109
+
110
+ **测试验证**:
111
+ - ✅ 新增 11 个测试用例,100% 通过
112
+ - ✅ 三轮彻底验证,所有场景覆盖
113
+
114
+ **升级建议**:
115
+ ```bash
116
+ # 如果你使用了 upsert,请立即升级
117
+ npm update monsqlize
118
+ ```
119
+
118
120
  📖 **详细分析**: 历史验证报告未作为当前 npm 包资产发布;如需追溯,请以仓库归档或项目内部报告为准。
119
-
120
- #### 其他改进
121
-
122
- - ✅ function-cache 性能优化 (23-45% 提升)
123
- - ✅ 新增 17 个复杂数据类型测试
124
- - ✅ 代码质量提升 (A → A+)
125
- - ✅ 全局 Map 监控机制
126
- - ✅ 错误日志记录增强
127
-
128
- ---
129
-
130
- ## 变更统计
131
-
132
- | 版本系列 | 版本数 | 主要改进方向 |
133
- |---------|-------|------------|
134
- | v1.1.x | 5 | **数据一致性修复** 🆕、通用函数缓存、文档完善、日志优化、100% MongoDB 操作符 |
135
- | v1.0.x | 10 | 企业级功能、分布式支持、Model 层完善、Schema 验证、统一表达式系统 |
136
-
137
- ---
138
-
139
- ## 文档与验证改进
140
-
141
- ### v1.1.3 - 文档完善与验证体系 📚
142
-
143
- **发布日期**: 2026-02-03
144
- **版本类型**: 文档优化 + 验证体系完善
145
- **重要性**: ⭐⭐⭐⭐
146
-
147
- #### 核心改进
148
-
149
- **多连接池文档优化**:
150
- - ✅ 修复代码实现(ConnectionPoolManager 导出、selectPool 返回值完整)
151
- - ✅ 验证 100% 通过(76 项功能验证)
152
- - ✅ 文档精简(2082 行 → 1970 行,-5%)
153
- - ✅ 目录格式统一、删除重复内容
154
-
155
- **健康检查机制详解**:
156
- - ✅ 新增文档 `docs/multi-pool-health-check.md`
157
- - ✅ 详细说明工作原理、问题发现、问题处理
158
- - ✅ 提供 3 种运维通知方式(日志、监控、事件)
159
- - ✅ 集成方案(Prometheus、企业微信/钉钉、邮件)
160
- - ✅ 完整的生产环境告警系统代码
161
-
162
- **验证体系规范**:
163
- - ✅ 文档规范说明(目录格式、内容规范、禁止内容)
164
- - ✅ 文档更新流程(4 步)
165
- - ✅ 引用关系规范(建立原则、禁止情况、判断流程)
166
- - ✅ 验证通过标准(6 项)
167
-
168
- #### 影响范围
169
-
170
- - **文档文件**: 3 个(multi-pool.md、multi-pool-health-check.md、README.md)
171
- - **代码文件**: 2 个(lib/index.js、ConnectionPoolManager.js)
172
- - **验证文件**: 5 个(清单、脚本、报告)
173
- - **规范文件**: 1 个(validation/README.md)
174
-
175
- #### 升级说明
176
-
177
- **无破坏性变更**,现有代码无需修改:
178
- ```bash
179
- npm update monsqlize
180
- ```
181
-
121
+
122
+ #### 其他改进
123
+
124
+ - ✅ function-cache 性能优化 (23-45% 提升)
125
+ - ✅ 新增 17 个复杂数据类型测试
126
+ - ✅ 代码质量提升 (A → A+)
127
+ - ✅ 全局 Map 监控机制
128
+ - ✅ 错误日志记录增强
129
+
130
+ ---
131
+
132
+ ## 变更统计
133
+
134
+ | 版本系列 | 版本数 | 主要改进方向 |
135
+ |---------|-------|------------|
136
+ | v1.1.x | 5 | **数据一致性修复** 🆕、通用函数缓存、文档完善、日志优化、100% MongoDB 操作符 |
137
+ | v1.0.x | 10 | 企业级功能、分布式支持、Model 层完善、Schema 验证、统一表达式系统 |
138
+
139
+ ---
140
+
141
+ ## 文档与验证改进
142
+
143
+ ### v1.1.3 - 文档完善与验证体系 📚
144
+
145
+ **发布日期**: 2026-02-03
146
+ **版本类型**: 文档优化 + 验证体系完善
147
+ **重要性**: ⭐⭐⭐⭐
148
+
149
+ #### 核心改进
150
+
151
+ **多连接池文档优化**:
152
+ - ✅ 修复代码实现(ConnectionPoolManager 导出、selectPool 返回值完整)
153
+ - ✅ 验证 100% 通过(76 项功能验证)
154
+ - ✅ 文档精简(2082 行 → 1970 行,-5%)
155
+ - ✅ 目录格式统一、删除重复内容
156
+
157
+ **健康检查机制详解**:
158
+ - ✅ 新增文档 `docs/multi-pool-health-check.md`
159
+ - ✅ 详细说明工作原理、问题发现、问题处理
160
+ - ✅ 提供 3 种运维通知方式(日志、监控、事件)
161
+ - ✅ 集成方案(Prometheus、企业微信/钉钉、邮件)
162
+ - ✅ 完整的生产环境告警系统代码
163
+
164
+ **验证体系规范**:
165
+ - ✅ 文档规范说明(目录格式、内容规范、禁止内容)
166
+ - ✅ 文档更新流程(4 步)
167
+ - ✅ 引用关系规范(建立原则、禁止情况、判断流程)
168
+ - ✅ 验证通过标准(6 项)
169
+
170
+ #### 影响范围
171
+
172
+ - **文档文件**: 3 个(multi-pool.md、multi-pool-health-check.md、README.md)
173
+ - **代码文件**: 2 个(lib/index.js、ConnectionPoolManager.js)
174
+ - **验证文件**: 5 个(清单、脚本、报告)
175
+ - **规范文件**: 1 个(validation/README.md)
176
+
177
+ #### 升级说明
178
+
179
+ **无破坏性变更**,现有代码无需修改:
180
+ ```bash
181
+ npm update monsqlize
182
+ ```
183
+
182
184
  📖 **详细变更**: [查看完整变更日志](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.1.3.md)
183
-
184
- ---
185
-
186
- ## 里程碑版本
187
-
188
- ### v1.1.2 - 日志优化 🔧
189
-
190
- **发布日期**: 2026-01-27
191
- **重要性**: ⭐⭐⭐
192
-
193
- **优化内容**:
194
-
195
- 1. **ObjectId 转换日志默认静默**
196
- - ✅ **默认完全静默**: 不输出任何 ObjectId 转换日志
197
- - ✅ **用户反馈驱动**: 根据用户反馈,转换日志无实际作用
198
- - ✅ **可选启用**: 支持按需启用摘要或详细日志
199
- - ✅ **生产友好**: 减少日志量,避免日志污染
200
-
201
- 2. **Saga 日志修复**
202
- - ✅ **修复误导性日志**: 正确区分内存缓存和 Redis 缓存
203
- - ✅ **准确识别**: 通过检测 `cache.keys` 和 `cache.publish` 方法识别 Redis
204
- - ✅ **日志准确**: 内存缓存显示"使用内存缓存",Redis 显示"使用 Redis 存储"
205
-
206
- **配置选项**:
207
-
208
- ```javascript
209
- // 默认配置(完全静默)
210
- const msq = new MonSQLize({
211
- type: 'mongodb',
212
- config: { uri: 'mongodb://localhost:27017' }
213
- });
214
- // ✅ 无任何 ObjectId 转换日志
215
-
216
- // 启用摘要日志(调试用)
217
- const msq = new MonSQLize({
218
- type: 'mongodb',
219
- config: { uri: 'mongodb://localhost:27017' },
220
- autoConvertObjectId: {
221
- silent: false // 关闭静默
222
- }
223
- });
224
- // 输出:[DEBUG] Converted 15 cross-version ObjectIds
225
-
226
- // 启用详细日志(深度调试)
227
- const msq = new MonSQLize({
228
- type: 'mongodb',
229
- config: { uri: 'mongodb://localhost:27017' },
230
- autoConvertObjectId: {
231
- silent: false,
232
- verbose: true
233
- }
234
- });
235
- // 输出:每个 ObjectId 都有一条日志
236
- ```
237
-
238
- **效果对比**:
239
-
240
- | 模式 | silent | verbose | 日志输出 | 适用场景 |
241
- |------|--------|---------|---------|---------|
242
- | **静默模式**(默认)✅ | `true` | - | 无 | 生产环境、日常开发 |
243
- | **摘要模式** | `false` | `false` | 1条摘要 | 需要了解转换情况时 |
244
- | **详细模式** | `false` | `true` | N条详情 | 深度调试、排查问题 |
245
-
246
- **修改的文件**:
247
- - `lib/utils/objectid-converter.js`: 添加 `silent` 配置,默认 `true`
248
- - `lib/saga/SagaOrchestrator.js`: 修复 Redis 识别逻辑
249
-
250
- **详细文档**:
185
+
186
+ ---
187
+
188
+ ## 里程碑版本
189
+
190
+ ### v1.1.2 - 日志优化 🔧
191
+
192
+ **发布日期**: 2026-01-27
193
+ **重要性**: ⭐⭐⭐
194
+
195
+ **优化内容**:
196
+
197
+ 1. **ObjectId 转换日志默认静默**
198
+ - ✅ **默认完全静默**: 不输出任何 ObjectId 转换日志
199
+ - ✅ **用户反馈驱动**: 根据用户反馈,转换日志无实际作用
200
+ - ✅ **可选启用**: 支持按需启用摘要或详细日志
201
+ - ✅ **生产友好**: 减少日志量,避免日志污染
202
+
203
+ 2. **Saga 日志修复**
204
+ - ✅ **修复误导性日志**: 正确区分内存缓存和 Redis 缓存
205
+ - ✅ **准确识别**: 通过检测 `cache.keys` 和 `cache.publish` 方法识别 Redis
206
+ - ✅ **日志准确**: 内存缓存显示"使用内存缓存",Redis 显示"使用 Redis 存储"
207
+
208
+ **配置选项**:
209
+
210
+ ```javascript
211
+ // 默认配置(完全静默)
212
+ const msq = new MonSQLize({
213
+ type: 'mongodb',
214
+ config: { uri: 'mongodb://localhost:27017' }
215
+ });
216
+ // ✅ 无任何 ObjectId 转换日志
217
+
218
+ // 启用摘要日志(调试用)
219
+ const msq = new MonSQLize({
220
+ type: 'mongodb',
221
+ config: { uri: 'mongodb://localhost:27017' },
222
+ autoConvertObjectId: {
223
+ silent: false // 关闭静默
224
+ }
225
+ });
226
+ // 输出:[DEBUG] Converted 15 cross-version ObjectIds
227
+
228
+ // 启用详细日志(深度调试)
229
+ const msq = new MonSQLize({
230
+ type: 'mongodb',
231
+ config: { uri: 'mongodb://localhost:27017' },
232
+ autoConvertObjectId: {
233
+ silent: false,
234
+ verbose: true
235
+ }
236
+ });
237
+ // 输出:每个 ObjectId 都有一条日志
238
+ ```
239
+
240
+ **效果对比**:
241
+
242
+ | 模式 | silent | verbose | 日志输出 | 适用场景 |
243
+ |------|--------|---------|---------|---------|
244
+ | **静默模式**(默认)✅ | `true` | - | 无 | 生产环境、日常开发 |
245
+ | **摘要模式** | `false` | `false` | 1条摘要 | 需要了解转换情况时 |
246
+ | **详细模式** | `false` | `true` | N条详情 | 深度调试、排查问题 |
247
+
248
+ **修改的文件**:
249
+ - `lib/utils/objectid-converter.js`: 添加 `silent` 配置,默认 `true`
250
+ - `lib/saga/SagaOrchestrator.js`: 修复 Redis 识别逻辑
251
+
252
+ **详细文档**:
251
253
  - [ObjectId 日志配置](https://github.com/vextjs/monSQLize/blob/main/docs/objectid-logging-optimization.md)
252
254
  - [FAQ - Q3: 如何关闭日志](https://github.com/vextjs/monSQLize/blob/main/docs/objectid-cross-version-faq.md#q3)
253
-
254
- ---
255
-
256
- ### v1.1.1 - ObjectId 跨版本兼容 🔧
257
-
258
- **发布日期**: 2026-01-27
259
- **重要性**: ⭐⭐⭐⭐
260
-
261
- **问题背景**:
262
- - 混用 mongoose (bson@4.x/5.x) 和 monSQLize (bson@6.x) 时出现版本冲突
263
- - 错误信息:`Unsupported BSON version, bson types must be from bson 6.x.x`
264
- - 跨服务数据传递时 ObjectId 实例无法被 mongodb@6.x 驱动识别
265
-
266
- **解决方案**:
267
- - ✅ **自动跨版本转换**: 检测并转换来自其他 BSON 版本的 ObjectId
268
- - ✅ **递归处理**: 自动处理嵌套对象和数组中的 ObjectId
269
- - ✅ **性能优化**: 无需转换时返回原对象(零拷贝)
270
- - ✅ **错误降级**: 转换失败时返回原值,不影响其他字段
271
- - ✅ **调试支持**: 提供详细的转换日志
272
-
273
- **兼容性**:
274
- | BSON 版本 | mongoose 版本 | 支持状态 |
275
- |-----------|--------------|---------|
276
- | bson@4.x | mongoose@5.x | ✅ 完全支持 |
277
- | bson@5.x | mongoose@6.x | ✅ 完全支持 |
278
- | bson@6.x | mongoose@7.x | ✅ 原生支持 |
279
-
280
- **测试覆盖**:
281
- - 🏆 **测试数量**: 17个测试用例
282
- - 🏆 **通过率**: 100% (17/17通过)
283
- - 🏆 **覆盖场景**: 基础转换、嵌套对象、数组、边界情况、错误处理
284
-
285
- **使用示例**:
286
- ```javascript
287
- // 从 mongoose 获取数据(包含 bson@4.x/5.x 的 ObjectId)
288
- const dataFromMongoose = await MongooseModel.findOne({ ... }).lean();
289
-
290
- // 直接插入,monSQLize 自动转换 ObjectId
291
- const result = await msq.collection('orders').insertOne(dataFromMongoose);
292
- // ✅ 成功:自动将旧版本 ObjectId 转换为 bson@6.x 版本
293
- ```
294
-
255
+
256
+ ---
257
+
258
+ ### v1.1.1 - ObjectId 跨版本兼容 🔧
259
+
260
+ **发布日期**: 2026-01-27
261
+ **重要性**: ⭐⭐⭐⭐
262
+
263
+ **问题背景**:
264
+ - 混用 mongoose (bson@4.x/5.x) 和 monSQLize (bson@6.x) 时出现版本冲突
265
+ - 错误信息:`Unsupported BSON version, bson types must be from bson 6.x.x`
266
+ - 跨服务数据传递时 ObjectId 实例无法被 mongodb@6.x 驱动识别
267
+
268
+ **解决方案**:
269
+ - ✅ **自动跨版本转换**: 检测并转换来自其他 BSON 版本的 ObjectId
270
+ - ✅ **递归处理**: 自动处理嵌套对象和数组中的 ObjectId
271
+ - ✅ **性能优化**: 无需转换时返回原对象(零拷贝)
272
+ - ✅ **错误降级**: 转换失败时返回原值,不影响其他字段
273
+ - ✅ **调试支持**: 提供详细的转换日志
274
+
275
+ **兼容性**:
276
+ | BSON 版本 | mongoose 版本 | 支持状态 |
277
+ |-----------|--------------|---------|
278
+ | bson@4.x | mongoose@5.x | ✅ 完全支持 |
279
+ | bson@5.x | mongoose@6.x | ✅ 完全支持 |
280
+ | bson@6.x | mongoose@7.x | ✅ 原生支持 |
281
+
282
+ **测试覆盖**:
283
+ - 🏆 **测试数量**: 17个测试用例
284
+ - 🏆 **通过率**: 100% (17/17通过)
285
+ - 🏆 **覆盖场景**: 基础转换、嵌套对象、数组、边界情况、错误处理
286
+
287
+ **使用示例**:
288
+ ```javascript
289
+ // 从 mongoose 获取数据(包含 bson@4.x/5.x 的 ObjectId)
290
+ const dataFromMongoose = await MongooseModel.findOne({ ... }).lean();
291
+
292
+ // 直接插入,monSQLize 自动转换 ObjectId
293
+ const result = await msq.collection('orders').insertOne(dataFromMongoose);
294
+ // ✅ 成功:自动将旧版本 ObjectId 转换为 bson@6.x 版本
295
+ ```
296
+
295
297
  **详细文档**: [查看 docs/objectid-cross-version.md](https://github.com/vextjs/monSQLize/blob/main/docs/objectid-cross-version.md)
296
-
297
- ---
298
-
299
- ### v1.0.9 - 统一表达式系统 🎉
300
-
301
- **发布日期**: 2026-01-19
302
- **重要性**: ⭐⭐⭐⭐⭐
303
-
304
- **核心功能**:
305
- - ✅ **67个统一表达式操作符**: 完整实现阶段1 (43个) + 阶段2 (24个)
306
- - ✅ **上下文感知编译**: 自动检测 $match/$project/$group 上下文
307
- - ✅ **递归函数调用**: 支持任意深度的函数嵌套
308
- - ✅ **Lambda表达式**: FILTER/MAP 完整支持
309
- - ✅ **高性能缓存**: LRU缓存,>90%命中率
310
- - ✅ **100%向后兼容**: 无破坏性变更
311
-
312
- **测试覆盖**:
313
- - 🏆 **测试数量**: 107个测试用例 (新增19个边界测试)
314
- - 🏆 **通过率**: 100% (107/107通过)
315
- - 🏆 **边界覆盖**: 95%+ 边界情况覆盖
316
- - 🏆 **质量评级**: A+ (98.8%完成度)
317
-
318
- **文档更新**:
319
- - 📚 **聚合文档更新**: aggregate.md 新增统一表达式章节
320
- - 📚 **完整实施报告**: 15+份详细报告
321
- - 📚 **质量分析**: 全面质量检查和验证
322
-
323
- ### v1.0.8 - 企业级功能升级 🎉
324
-
325
- **发布日期**: 2026-01-16
326
- **重要性**: ⭐⭐⭐⭐⭐
327
-
328
- **核心功能**:
329
- - ✅ **企业级多连接池管理**: 支持 primary、secondary、analytics、custom 角色
330
- - ✅ **智能选择策略**: auto、roundRobin、weighted、leastConnections、manual
331
- - ✅ **健康检查机制**: 自动故障检测和恢复,支持自定义检查间隔和重试次数
332
- - ✅ **Update 聚合管道**: updateOne/updateMany 支持聚合管道语法
333
- - ✅ **Saga 分布式事务**: 完整的补偿机制,支持跨服务事务
334
-
335
- **质量提升**:
336
- - 🏆 **测试覆盖率**: 90.77% (从 37.8% 提升,+53%)
337
- - 🏆 **测试数量**: 400+个测试用例 (增长 4000%)
338
- - 🏆 **函数覆盖率**: 95.23%
339
- - 🏆 **核心功能**: 100% 测试覆盖
340
- - 🏆 **行业领先**: 超过 85% 的开源项目
341
-
342
- **重大改进**:
343
- 1. **多连接池架构**:
344
- - ConnectionPoolManager: 统一管理多个连接池
345
- - HealthChecker: 实时健康监控
346
- - PoolSelector: 5种智能选择策略
347
- - PoolStats: 完整的统计收集
348
-
349
- 2. **Update 聚合管道**:
350
- - 支持字段间计算 (`$add`、`$multiply`、`$subtract`)
351
- - 条件赋值 (`$cond`、`$ifNull`)
352
- - 多阶段转换 (`$concat`、`$toLower`、`$toUpper`)
353
- - 完全兼容 MongoDB 4.2+ 语法
354
-
355
- 3. **Saga 分布式事务**:
356
- - 自动补偿机制
357
- - 事务状态跟踪
358
- - 支持超时和重试
359
- - 完整的错误处理
360
-
298
+
299
+ ---
300
+
301
+ ### v1.0.9 - 统一表达式系统 🎉
302
+
303
+ **发布日期**: 2026-01-19
304
+ **重要性**: ⭐⭐⭐⭐⭐
305
+
306
+ **核心功能**:
307
+ - ✅ **67个统一表达式操作符**: 完整实现阶段1 (43个) + 阶段2 (24个)
308
+ - ✅ **上下文感知编译**: 自动检测 $match/$project/$group 上下文
309
+ - ✅ **递归函数调用**: 支持任意深度的函数嵌套
310
+ - ✅ **Lambda表达式**: FILTER/MAP 完整支持
311
+ - ✅ **高性能缓存**: LRU缓存,>90%命中率
312
+ - ✅ **100%向后兼容**: 无破坏性变更
313
+
314
+ **测试覆盖**:
315
+ - 🏆 **测试数量**: 107个测试用例 (新增19个边界测试)
316
+ - 🏆 **通过率**: 100% (107/107通过)
317
+ - 🏆 **边界覆盖**: 95%+ 边界情况覆盖
318
+ - 🏆 **质量评级**: A+ (98.8%完成度)
319
+
320
+ **文档更新**:
321
+ - 📚 **聚合文档更新**: aggregate.md 新增统一表达式章节
322
+ - 📚 **完整实施报告**: 15+份详细报告
323
+ - 📚 **质量分析**: 全面质量检查和验证
324
+
325
+ ### v1.0.8 - 企业级功能升级 🎉
326
+
327
+ **发布日期**: 2026-01-16
328
+ **重要性**: ⭐⭐⭐⭐⭐
329
+
330
+ **核心功能**:
331
+ - ✅ **企业级多连接池管理**: 支持 primary、secondary、analytics、custom 角色
332
+ - ✅ **智能选择策略**: auto、roundRobin、weighted、leastConnections、manual
333
+ - ✅ **健康检查机制**: 自动故障检测和恢复,支持自定义检查间隔和重试次数
334
+ - ✅ **Update 聚合管道**: updateOne/updateMany 支持聚合管道语法
335
+ - ✅ **Saga 分布式事务**: 完整的补偿机制,支持跨服务事务
336
+
337
+ **质量提升**:
338
+ - 🏆 **测试覆盖率**: 90.77% (从 37.8% 提升,+53%)
339
+ - 🏆 **测试数量**: 400+个测试用例 (增长 4000%)
340
+ - 🏆 **函数覆盖率**: 95.23%
341
+ - 🏆 **核心功能**: 100% 测试覆盖
342
+ - 🏆 **行业领先**: 超过 85% 的开源项目
343
+
344
+ **重大改进**:
345
+ 1. **多连接池架构**:
346
+ - ConnectionPoolManager: 统一管理多个连接池
347
+ - HealthChecker: 实时健康监控
348
+ - PoolSelector: 5种智能选择策略
349
+ - PoolStats: 完整的统计收集
350
+
351
+ 2. **Update 聚合管道**:
352
+ - 支持字段间计算 (`$add`、`$multiply`、`$subtract`)
353
+ - 条件赋值 (`$cond`、`$ifNull`)
354
+ - 多阶段转换 (`$concat`、`$toLower`、`$toUpper`)
355
+ - 完全兼容 MongoDB 4.2+ 语法
356
+
357
+ 3. **Saga 分布式事务**:
358
+ - 自动补偿机制
359
+ - 事务状态跟踪
360
+ - 支持超时和重试
361
+ - 完整的错误处理
362
+
361
363
  **详细信息**: [查看 changelogs/v1.0.8.md](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.0.8.md)
362
-
363
- ---
364
-
365
- ### v1.0.7 - 依赖更新与测试修复 🔧
366
-
367
- **发布日期**: 2026-01-09
368
- **重要性**: ⭐⭐⭐
369
-
370
- **核心改进**:
371
- - ✅ 升级 schema-dsl 到 v1.1.3(修复类型错误消息模板变量未替换 bug)
372
- - ✅ 修复测试用例中错误的 Schema 语法(17处)
373
- - ✅ 所有测试通过(38/38 测试套件,100%)
374
- - ✅ 将 schema-dsl 从 devDependencies 移至 dependencies(Model 层运行时依赖)
375
-
364
+
365
+ ---
366
+
367
+ ### v1.0.7 - 依赖更新与测试修复 🔧
368
+
369
+ **发布日期**: 2026-01-09
370
+ **重要性**: ⭐⭐⭐
371
+
372
+ **核心改进**:
373
+ - ✅ 升级 schema-dsl 到 v1.1.3(修复类型错误消息模板变量未替换 bug)
374
+ - ✅ 修复测试用例中错误的 Schema 语法(17处)
375
+ - ✅ 所有测试通过(38/38 测试套件,100%)
376
+ - ✅ 将 schema-dsl 从 devDependencies 移至 dependencies(Model 层运行时依赖)
377
+
376
378
  **详细信息**: [查看 changelogs/v1.0.7.md](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.0.7.md)
377
-
378
- ---
379
-
380
- ### v1.0.6 - 文档完善 📚
381
-
382
- **发布日期**: 2026-01-08
383
- **重要性**: ⭐⭐⭐
384
-
385
- **核心成就**:
386
- - ✅ 文档完整性达到 100%
387
- - ✅ 新增 ObjectId 自动转换完整文档(600行)
388
- - ✅ 验证所有 v1.3.0+ 功能都有文档
389
-
379
+
380
+ ---
381
+
382
+ ### v1.0.6 - 文档完善 📚
383
+
384
+ **发布日期**: 2026-01-08
385
+ **重要性**: ⭐⭐⭐
386
+
387
+ **核心成就**:
388
+ - ✅ 文档完整性达到 100%
389
+ - ✅ 新增 ObjectId 自动转换完整文档(600行)
390
+ - ✅ 验证所有 v1.3.0+ 功能都有文档
391
+
390
392
  **详细信息**: [查看 changelogs/v1.0.6.md](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.0.6.md)
391
-
392
- ---
393
-
394
- ### v1.0.5 - Model 层易用性提升 🚀
395
-
396
- **发布日期**: 2026-01-08
397
- **重要性**: ⭐⭐⭐⭐
398
-
399
- **核心特性**:
400
- - ✅ Schema 验证默认启用(提升数据质量)
401
- - ✅ Model 自动加载机制(减少样板代码)
402
- - ✅ 类型定义完善
403
-
393
+
394
+ ---
395
+
396
+ ### v1.0.5 - Model 层易用性提升 🚀
397
+
398
+ **发布日期**: 2026-01-08
399
+ **重要性**: ⭐⭐⭐⭐
400
+
401
+ **核心特性**:
402
+ - ✅ Schema 验证默认启用(提升数据质量)
403
+ - ✅ Model 自动加载机制(减少样板代码)
404
+ - ✅ 类型定义完善
405
+
404
406
  **详细信息**: [查看 changelogs/v1.0.5.md](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.0.5.md)
405
-
406
- ---
407
-
408
- ### v1.0.4 - 虚拟字段与 Bug 修复 ✨
409
-
410
- **发布日期**: 2026-01-07
411
- **重要性**: ⭐⭐⭐⭐
412
-
413
- **核心特性**:
414
- - ✅ 虚拟字段(计算属性)
415
- - ✅ 默认值(插入时自动填充)
416
- - ✅ 嵌套 Populate Bug 修复
417
-
407
+
408
+ ---
409
+
410
+ ### v1.0.4 - 虚拟字段与 Bug 修复 ✨
411
+
412
+ **发布日期**: 2026-01-07
413
+ **重要性**: ⭐⭐⭐⭐
414
+
415
+ **核心特性**:
416
+ - ✅ 虚拟字段(计算属性)
417
+ - ✅ 默认值(插入时自动填充)
418
+ - ✅ 嵌套 Populate Bug 修复
419
+
418
420
  **详细信息**: [查看 changelogs/v1.0.4.md](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.0.4.md)
419
-
420
- ---
421
-
422
- ### v1.0.0 - 正式发布 🎉
423
-
424
- **发布日期**: 2025-12-03
425
- **重要性**: ⭐⭐⭐⭐⭐
426
-
427
- **核心成就**:
428
- - ✅ 已发布到 npm
429
- - ✅ 生产就绪
430
- - ✅ 企业级质量(96/100 A+)
431
- - ✅ 1000+ 测试用例
432
- - ✅ 77%+ 测试覆盖率
433
-
421
+
422
+ ---
423
+
424
+ ### v1.0.0 - 正式发布 🎉
425
+
426
+ **发布日期**: 2025-12-03
427
+ **重要性**: ⭐⭐⭐⭐⭐
428
+
429
+ **核心成就**:
430
+ - ✅ 已发布到 npm
431
+ - ✅ 生产就绪
432
+ - ✅ 企业级质量(96/100 A+)
433
+ - ✅ 1000+ 测试用例
434
+ - ✅ 77%+ 测试覆盖率
435
+
434
436
  **详细信息**: [查看 changelogs/v1.0.0.md](https://github.com/vextjs/monSQLize/blob/main/changelogs/v1.0.0.md)
435
-
436
- ---
437
-
438
- ## 详细变更文档
439
-
440
- > **说明**: 详细变更文档位于 `changelogs/` 目录
441
-
442
- ```
437
+
438
+ ---
439
+
440
+ ## 详细变更文档
441
+
442
+ > **说明**: 详细变更文档位于 `changelogs/` 目录
443
+
444
+ ```
443
445
  changelogs/
444
446
  ├── README.md # 变更文档说明
445
447
  ├── TEMPLATE.md # 变更文档模板
446
- ├── v2.0.0.md # 当前发布详细变更
448
+ ├── v2.0.1.md # 当前发布详细变更
449
+ ├── v2.0.0.md # v2 TypeScript 重写发布详细变更
447
450
  └── v1.x.y.md # 历史版本详细变更(仓库归档)
448
451
  ```
449
-
450
- **注意**:
451
- - `changelogs/` 目录包含所有版本的详细变更文档
452
- - 本文件(CHANGELOG.md)仅提供版本概览和里程碑摘要
452
+
453
+ **注意**:
454
+ - `changelogs/` 目录包含所有版本的详细变更文档
455
+ - 本文件(CHANGELOG.md)仅提供版本概览和里程碑摘要
453
456
  - 早期 `STATUS.md` 状态看板已不再作为当前仓库和 npm 包资产保留。
454
-
455
- ---
456
-
457
- ## 维护说明
458
-
459
- ### 添加新版本的步骤
460
-
461
- 1. **创建详细变更文档**
462
- ```bash
463
- cp changelogs/TEMPLATE.md changelogs/vX.Y.Z.md
464
- # 填充详细变更信息
465
- ```
466
-
467
- 2. **更新 CHANGELOG.md**(本文件)
468
- - 在"版本概览"表格最上方添加新行
457
+
458
+ ---
459
+
460
+ ## 维护说明
461
+
462
+ ### 添加新版本的步骤
463
+
464
+ 1. **创建详细变更文档**
465
+ ```bash
466
+ cp changelogs/TEMPLATE.md changelogs/vX.Y.Z.md
467
+ # 填充详细变更信息
468
+ ```
469
+
470
+ 2. **更新 CHANGELOG.md**(本文件)
471
+ - 在"版本概览"表格最上方添加新行
469
472
  - 格式:版本列和详情列都指向 `./changelogs/vX.Y.Z.md`,当前 npm 包默认只随带当前发布版本的详细文档。
470
473
 
471
474
  3. **更新状态看板**(如项目重新启用)
472
475
  - 当前仓库未保留 `STATUS.md` 作为发布资产;如后续恢复状态看板,再同步版本章节和需求状态。
473
-
474
- 4. **提交变更**
475
- ```bash
476
+
477
+ 4. **提交变更**
478
+ ```bash
476
479
  git add CHANGELOG.md changelogs/vX.Y.Z.md
477
- git commit -m "docs: 发布 vX.Y.Z"
478
- ```
479
-
480
- ### 版本号规则
481
-
482
- 遵循[语义化版本](https://semver.org/lang/zh-CN/)(Semantic Versioning):
483
-
484
- - **MAJOR** (x.0.0) - 不兼容的 API 变更
485
- - **MINOR** (0.x.0) - 向后兼容的新增功能
486
- - **PATCH** (0.0.x) - 向后兼容的问题修复
487
-
488
- 示例:
489
- - `1.0.0 → 1.0.1` - Bug 修复
490
- - `1.0.0 → 1.1.0` - 新功能
491
- - `1.0.0 → 2.0.0` - 破坏性变更
492
-
493
- ---
494
-
495
- ## 相关文档
496
-
497
- - [changelogs/v2.0.0.md](./changelogs/v2.0.0.md) - 当前发布详细变更文档
480
+ git commit -m "docs: 发布 vX.Y.Z"
481
+ ```
482
+
483
+ ### 版本号规则
484
+
485
+ 遵循[语义化版本](https://semver.org/lang/zh-CN/)(Semantic Versioning):
486
+
487
+ - **MAJOR** (x.0.0) - 不兼容的 API 变更
488
+ - **MINOR** (0.x.0) - 向后兼容的新增功能
489
+ - **PATCH** (0.0.x) - 向后兼容的问题修复
490
+
491
+ 示例:
492
+ - `1.0.0 → 1.0.1` - Bug 修复
493
+ - `1.0.0 → 1.1.0` - 新功能
494
+ - `1.0.0 → 2.0.0` - 破坏性变更
495
+
496
+ ---
497
+
498
+ ## 相关文档
499
+
500
+ - [changelogs/v2.0.1.md](./changelogs/v2.0.1.md) - 当前发布详细变更文档
498
501
  - [README.md](./README.md) - 项目说明
499
502
  - [docs/](https://github.com/vextjs/monSQLize/blob/main/docs/index.md) - API 文档
500
-
501
- ---
502
-
503
- **最后更新**: 2026-06-01
504
-
503
+
504
+ ---
505
+
506
+ **最后更新**: 2026-06-03
507
+