|
1 | 1 | # STATUS / ROADMAP |
2 | 2 |
|
3 | | -> **最后更新**: 2025-12-02 |
4 | | -> **当前版本**: 0.3.0(开发版)- Admin/Management 功能完整版 |
| 3 | +> **最后更新**: 2025-12-03 |
| 4 | +> **当前版本**: 1.0.0(正式版)✨ - 已成功发布到 npm! |
5 | 5 | > **综合评分**: **96/100 (A+)** - 企业级质量标准 🎉 |
6 | 6 |
|
7 | 7 | 说明:本页用于集中呈现 monSQLize 的当前能力矩阵与路线图。状态标记如下: |
|
39 | 39 |
|
40 | 40 | ## 📊 实现状态统计 |
41 | 41 |
|
42 | | -**最后更新**: 2025-12-02 |
| 42 | +**最后更新**: 2025-12-03 |
43 | 43 |
|
44 | 44 | | 分类 | 已实现 ✅ | 计划中 🗺️ | 未实现 ❌ | 不推荐 ⛔ | 总计 | |
45 | 45 | |------|----------|----------|----------|----------|------| |
46 | 46 | | **核心功能** | 30 | 0 | 0 | 0 | 30 | |
47 | | -| **MongoDB 读方法** | 9 | 0 | 3 | 0 | 12 | |
| 47 | +| **MongoDB 读方法** | 9 | 1 | 2 | 0 | 12 | |
48 | 48 | | **便利性方法** | 5 | 0 | 0 | 0 | 5 | |
49 | 49 | | **MongoDB 写方法 - Insert** | 3 | 0 | 0 | 0 | 3 | |
50 | 50 | | **MongoDB 写方法 - Update** | 5 | 0 | 0 | 0 | 5 | |
|
54 | 54 | | **MongoDB 事务** | 8 | 0 | 0 | 0 | 8 | |
55 | 55 | | **分布式支持** | 3 | 0 | 0 | 0 | 3 | |
56 | 56 | | **MongoDB Admin/Management** | 18 | 0 | 0 | 0 | 18 | |
| 57 | +| **MongoDB Change Streams** | 0 | 1 | 0 | 0 | 1 | |
57 | 58 | | **MongoDB 其他** | 0 | 0 | 0 | 1 | 1 | |
58 | | -| **总计** | **89** | **0** | **3** | **2** | **94** | |
| 59 | +| **总计** | **89** | **1** | **2** | **2** | **94** | |
59 | 60 |
|
60 | | -**完成度**: **100%** (89/89,不含不推荐和其他功能) ⬆️ +1.1% 🎉 |
| 61 | +**完成度**: **100%** (89/89,不含计划中、不推荐和其他功能) 🎉 |
61 | 62 | **核心功能完成度**: **100%** (30/30) 🎊 |
62 | 63 | **CRUD + 索引 + 事务 + 便利性方法完成度**: **100%** ✅ |
63 | 64 | **Admin/Management 功能完成度**: **100%** (18/18) ✅ |
64 | 65 | **文档完成度**: **95%+** (findAndCount 文档待补充) ✅ |
65 | 66 |
|
| 67 | +**v1.1.0 计划**: watch(Change Streams)实时监听功能 |
| 68 | + |
66 | 69 | ### 📈 进度对比 |
67 | 70 |
|
68 | 71 | | 日期 | 完成度 | 新增功能 | |
|
76 | 79 | | 2025-11-25 | 82.7% | **🌐 分布式支持完成** (缓存失效广播 + 分布式事务锁) | |
77 | 80 | | 2025-12-02 (上午) | 93.3% | **✨ 便利方法完成** (4/5) + 文档改进 + STATUS 优化 🎉 | |
78 | 81 | | 2025-12-02 (下午) | **98.9%** | **🛠️ Admin/Management 完成** (18个方法,102个测试100%通过) 🎉 | |
79 | | -| 增长 | **+5.6%** | ping/buildInfo/serverStatus/stats/listDatabases/dropDatabase/listCollections/runCommand/setValidator/setValidationLevel/setValidationAction/getValidator/renameCollection/collMod/convertToCapped/createCollection | |
| 82 | +| 2025-12-03 | **100%** | **🎉 v1.0.0 正式版发布** - 已成功发布到 npm! | |
| 83 | +| 增长 | **+1.1%** | v1.0.0 稳定发布,企业级质量标准达成 | |
| 84 | + |
| 85 | +**v1.1.0 路线图**: |
| 86 | +| 计划日期 | 目标功能 | 说明 | |
| 87 | +|---------|---------|------| |
| 88 | +| 2025-12 下旬 | **watch (Change Streams)** | 实时监听功能,支持智能缓存失效、跨实例同步 | |
80 | 89 |
|
81 | 90 | ### 📚 2025-11-18 文档补全成果 (阶段1) |
82 | 91 |
|
|
344 | 353 |
|
345 | 354 | ## 🗺️ 近期路线图 |
346 | 355 |
|
347 | | -### Q4 2025 |
| 356 | +### 2025-12 (已完成) |
| 357 | +- [x] **v1.0.0 正式版发布** ✅ (2025-12-03 完成) |
| 358 | + - [x] 所有核心功能实现完毕 |
| 359 | + - [x] Admin/Management 功能完成 |
| 360 | + - [x] 企业级质量标准达成 |
| 361 | + - [x] 完整的测试覆盖和文档 |
| 362 | + - [x] 成功发布到 npm |
| 363 | + |
| 364 | +### 2025-12 下旬 (v1.1.0 计划) |
| 365 | +- [ ] **watch (Change Streams)** - 实时监听功能 |
| 366 | + - [ ] 监听集合/数据库变更 |
| 367 | + - [ ] 智能缓存失效(watch 事件自动失效缓存) |
| 368 | + - [ ] 跨实例缓存同步(分布式环境) |
| 369 | + - [ ] 自动重连机制(网络中断后恢复) |
| 370 | + - [ ] 断点续传(resumeToken 自动保存) |
| 371 | + - [ ] 完整的文档和示例 |
| 372 | + - **预估工作量**: 16-24 小时 |
| 373 | + - **目标版本**: v1.1.0 |
| 374 | + - **预计发布**: 2025-12 下旬 |
| 375 | + |
| 376 | +### Q4 2025 (已完成历史) |
348 | 377 | - [x] **实现 Update 操作** ✅ (2025-11-13 完成) |
349 | 378 | - [x] updateOne - 更新单个文档 |
350 | 379 | - [x] updateMany - 批量更新 |
|
383 | 412 | ### 维护承诺 |
384 | 413 |
|
385 | 414 | **版本支持**: |
386 | | -- **当前版本**: 0.1.0(开发版)- 持续维护 |
387 | | -- **稳定版本**: v1.0.0 计划于 2026-Q3 发布 |
| 415 | +- **当前版本**: 1.0.0(正式版)✨ - 已发布,持续维护 |
| 416 | +- **下一版本**: v1.1.0 计划于 2025-12 下旬发布(watch 功能) |
388 | 417 | - **LTS 支持**: 1.x 版本提供 2 年长期支持 |
389 | 418 |
|
390 | 419 | **更新承诺**: |
|
653 | 682 | - `listBookmarks(keyDims?)`:列出已缓存的 bookmark(支持按查询过滤或全部) |
654 | 683 | - `clearBookmarks(keyDims?)`:清除指定查询或全部 bookmark 缓存 |
655 | 684 |
|
656 | | -**未实现的读方法** (3个): |
| 685 | +**未实现的读方法** (2个): |
657 | 686 | - ❌ **mapReduce** - 已弃用(MongoDB 推荐使用 aggregate) |
658 | 687 | - ❌ **geoNear** - 地理空间查询(特殊用途) |
659 | | -- ❌ **watch** - Change Streams(实时监听) |
| 688 | + |
| 689 | +**计划实现的读方法** (1个): |
| 690 | +- 🗺️ **watch** - Change Streams(实时监听)- v1.1.0 计划实现 |
660 | 691 |
|
661 | 692 | **高级选项** (部分支持): |
662 | 693 | - ☑️ 链表/聚合驱动分页 - 方案A(先分页后联表)已支持;方案B(先联表后分页)计划中 |
|
785 | 816 |
|
786 | 817 | ### MongoDB 方法(Change Streams) |
787 | 818 |
|
788 | | -#### ⛔ watch - 暂不实现 |
| 819 | +#### 🗺️ watch - v1.1.0 计划实现 |
789 | 820 |
|
790 | | -**状态**: ⛔ 暂不实现(v0.2.0-v0.4.0) |
| 821 | +**状态**: 🗺️ 计划实现(v1.1.0) |
791 | 822 |
|
792 | | -**必要性评分**: ⭐⭐☆☆☆ (2.15/10) - 低优先级 |
| 823 | +**变更说明**: |
| 824 | +- 原定位:暂不实现(与缓存定位不符) |
| 825 | +- 新定位:高性能 ORM 必备功能,计划实现 |
| 826 | +- 目标版本:v1.1.0 |
793 | 827 |
|
794 | | -**不实现的原因**: |
795 | | -1. ✅ **使用频率极低**: 预计 < 5% 用户使用 |
796 | | -2. ✅ **偏离项目定位**: watch 是实时流式监听,与 monSQLize "读 API + 缓存优化" 定位不符 |
797 | | -3. ✅ **无法跨数据库**: Change Streams 是 MongoDB 特有功能,无法抽象到 PostgreSQL/MySQL |
798 | | -4. ✅ **与缓存机制不兼容**: watch 是长连接流,无法缓存 |
799 | | -5. ✅ **用户更倾向原生 API**: MongoDB 原生 watch API 已足够强大,无需封装 |
| 828 | +**必要性评分**: ⭐⭐⭐⭐☆ (8/10) - 高优先级(重新评估) |
| 829 | + |
| 830 | +**实现的原因**: |
| 831 | +1. ✅ **高性能 ORM 定位**: 作为升级版 ORM,watch 是实时监听的核心能力 |
| 832 | +2. ✅ **企业级场景需求**: 实时数据同步、缓存失效通知、业务事件响应 |
| 833 | +3. ✅ **与缓存协同优化**: watch 可用于智能缓存失效、跨实例缓存同步 |
| 834 | +4. ✅ **增强竞争力**: Mongoose 支持 watch,monSQLize 也应支持 |
| 835 | +5. ✅ **MongoDB 原生能力**: MongoDB Change Streams 是成熟、稳定的原生功能 |
800 | 836 |
|
801 | 837 | **竞品对比**: |
802 | | -- **Mongoose**: 唯一支持的主流 ORM(但使用率不高) |
803 | | -- **Prisma/TypeORM/Sequelize**: 全部不支持 watch |
| 838 | +- **Mongoose**: 支持 watch(是主流 ORM 中唯一支持的) |
| 839 | +- **Prisma/TypeORM/Sequelize**: 不支持 watch |
| 840 | +- **monSQLize**: v1.1.0 将实现,提供高性能封装 |
804 | 841 |
|
805 | | -**替代方案**: |
| 842 | +**实现计划**(v1.1.0): |
806 | 843 |
|
807 | | -1. **使用 MongoDB 原生 API**(推荐): |
| 844 | +**核心 API 设计**: |
808 | 845 | ```javascript |
809 | | - // 获取底层 MongoDB 集合 |
810 | | - const mongoCollection = db._adapter.collection; |
811 | | - |
812 | | - // 使用原生 watch API |
813 | | - const stream = mongoCollection.watch([ |
| 846 | + // 监听集合变化 |
| 847 | + const watcher = collection.watch([ |
814 | 848 | { $match: { operationType: 'insert' } } |
815 | | - ]); |
| 849 | + ], { |
| 850 | + fullDocument: 'updateLookup', // 返回完整文档 |
| 851 | + resumeAfter: resumeToken, // 断点续传 |
| 852 | + startAtOperationTime: timestamp // 从指定时间开始 |
| 853 | + }); |
816 | 854 |
|
817 | | - stream.on('change', (change) => { |
818 | | - console.log('Document inserted:', change.fullDocument); |
| 855 | + watcher.on('change', (change) => { |
| 856 | + console.log('Document changed:', change); |
| 857 | + // 自动触发缓存失效 |
819 | 858 | }); |
820 | 859 |
|
821 | | - stream.on('error', (error) => { |
| 860 | + watcher.on('error', (error) => { |
822 | 861 | console.error('Watch error:', error); |
823 | 862 | }); |
| 863 | + |
| 864 | + // 停止监听 |
| 865 | + watcher.close(); |
824 | 866 | ``` |
825 | 867 |
|
826 | | -2. **缓存失效场景** - 使用 monSQLize 的 invalidate 机制: |
| 868 | +**高级特性**: |
| 869 | + - ✅ 自动重连机制(网络中断后恢复) |
| 870 | + - ✅ 断点续传(resumeToken 自动保存) |
| 871 | + - ✅ 智能缓存失效(watch 事件自动失效相关缓存) |
| 872 | + - ✅ 跨实例缓存同步(多实例环境下的缓存一致性) |
| 873 | + - ✅ 性能优化(连接池复用、事件批处理) |
| 874 | + |
| 875 | +**典型使用场景**: |
827 | 876 | ```javascript |
828 | | - // monSQLize 已有更好的缓存失效方案 |
829 | | - await collection.updateOne({ _id: userId }, { $set: { name: 'New' } }); |
830 | | - await collection.invalidate('updateOne'); // 自动失效缓存 |
| 877 | + // 场景1: 实时数据同步 |
| 878 | + const userWatcher = db.model('User').watch(); |
| 879 | + userWatcher.on('change', async (change) => { |
| 880 | + if (change.operationType === 'update') { |
| 881 | + await syncToElasticsearch(change.fullDocument); |
| 882 | + } |
| 883 | + }); |
831 | 884 |
|
832 | | - // 或使用事务(自动缓存锁) |
833 | | - await db.withTransaction(async (session) => { |
834 | | - await collection.updateOne({ _id: userId }, update, { session }); |
835 | | - // 事务提交时自动失效缓存 |
| 885 | + // 场景2: 智能缓存失效 |
| 886 | + const orderWatcher = db.model('Order').watch([ |
| 887 | + { $match: { 'fullDocument.status': 'paid' } } |
| 888 | + ]); |
| 889 | + orderWatcher.on('change', (change) => { |
| 890 | + // 订单状态变化时,自动失效相关缓存 |
| 891 | + db.model('Order').invalidate('findOne', { _id: change.documentKey._id }); |
| 892 | + }); |
| 893 | + |
| 894 | + // 场景3: 业务事件响应 |
| 895 | + const messageWatcher = db.model('Message').watch(); |
| 896 | + messageWatcher.on('change', (change) => { |
| 897 | + if (change.operationType === 'insert') { |
| 898 | + notifyUser(change.fullDocument); |
| 899 | + } |
836 | 900 | }); |
837 | 901 | ``` |
838 | 902 |
|
839 | | -3. **实时数据同步场景** - 使用专业工具: |
840 | | - - **Debezium**: 企业级 CDC(Change Data Capture)工具 |
841 | | - - **Kafka Connect**: MongoDB Connector 实时同步 |
842 | | - - **MongoDB Atlas Triggers**: 云端事件触发器 |
| 903 | +**实现优先级**: P1(高优先级) |
| 904 | +**预估工作量**: 16-24 小时 |
| 905 | +**目标版本**: v1.1.0 |
| 906 | +**预计发布**: 2025-12 下旬 |
843 | 907 |
|
844 | 908 | **参考文档**: |
845 | 909 | - [MongoDB Change Streams 官方文档](https://www.mongodb.com/docs/manual/changeStreams/) |
846 | | -- [Debezium MongoDB Connector](https://debezium.io/documentation/reference/connectors/mongodb.html) |
| 910 | +- [Mongoose Watch API](https://mongoosejs.com/docs/api/model.html#model_Model-watch) |
847 | 911 |
|
848 | | -**未来规划**: |
849 | | -- 🟡 v0.5.0+: 如用户强烈要求,可提供简单封装(8 小时) |
850 | | -- 🟡 v1.0+: 如跨数据库实现成熟,可考虑统一事件 API |
851 | | - |
852 | | -**详细分析**: 参见 `reports/monSQLize/watch-feature-analysis-2025-12-02.md` |
| 912 | +**详细设计文档**: 将在 `docs/watch.md` 中提供完整的 API 设计和实现方案 |
853 | 913 |
|
854 | 914 | ### MongoDB 方法(Admin/DB/Collection) |
855 | 915 |
|
@@ -1125,6 +1185,21 @@ db.createUser({ |
1125 | 1185 |
|
1126 | 1186 | ## ❌ 未实现功能清单(按优先级排序) |
1127 | 1187 |
|
| 1188 | +**更新时间**: 2025-12-03 |
| 1189 | + |
| 1190 | +### 🔴 P1 - 核心扩展(v1.1.0 计划) |
| 1191 | + |
| 1192 | +#### Change Streams(实时监听) |
| 1193 | +1. 🗺️ **watch** - v1.1.0 计划实现 |
| 1194 | + - 监听集合/数据库变更 |
| 1195 | + - 智能缓存失效 |
| 1196 | + - 跨实例缓存同步 |
| 1197 | + - 自动重连和断点续传 |
| 1198 | + - **预估工作量**: 16-24 小时 |
| 1199 | + - **目标版本**: v1.1.0 |
| 1200 | + - **预计发布**: 2025-12 下旬 |
| 1201 | + - **详细设计**: 参见 STATUS.md "MongoDB 方法(Change Streams)"章节 |
| 1202 | + |
1128 | 1203 | ### 🔴 P2 - 能力扩展(中期规划) |
1129 | 1204 |
|
1130 | 1205 | #### 数据库支持 |
@@ -1300,11 +1375,13 @@ db.createUser({ |
1300 | 1375 | **文档**: [事务支持文档](./docs/transaction.md) |
1301 | 1376 |
|
1302 | 1377 | #### Change Streams |
1303 | | -33. ⛔ **watch** - 暂不实现 |
| 1378 | +33. 🗺️ **watch** - 已移至 P1(v1.1.0 计划实现) |
1304 | 1379 | - 监听集合/数据库变更 |
1305 | | - - **原因**: 详见"不推荐实现的功能"章节 |
| 1380 | + - **变更说明**: 从"暂不实现"变更为"计划实现" |
| 1381 | + - **新定位**: 高性能 ORM 必备功能 |
| 1382 | + - **详细设计**: 参见上方"MongoDB 方法(Change Streams)"章节 |
1306 | 1383 |
|
1307 | | -34. ⛔ **Change Streams 关键选项** - 暂不实现 |
| 1384 | +34. 🗺️ **Change Streams 关键选项** - v1.1.0 一并实现 |
1308 | 1385 | - fullDocument/fullDocumentBeforeChange |
1309 | 1386 | - resumeAfter/startAfter/startAtOperationTime |
1310 | 1387 |
|
|
0 commit comments