@microi.net/cli 6.0.9 → 6.1.0

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 (119) hide show
  1. package/.codebuddy-plugin/marketplace.json +2 -2
  2. package/.codebuddy-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/.workbuddy-plugin/marketplace.json +2 -2
  5. package/.workbuddy-plugin/plugin.json +1 -1
  6. package/assets/build-meta.json +5 -5
  7. package/cordis.patch.yml +1 -1
  8. package/package.json +1 -1
  9. package/scripts/mcp-server.js +96 -96
  10. package/scripts/microi-cli.js +1 -1
  11. package/scripts/microi-skills.meta.json +309 -309
  12. package/skills/.microi-skills-version.json +2 -2
  13. package/skills/.progressive-disclosure-manifest.json +13 -13
  14. package/skills/README.md +287 -287
  15. package/skills/ai-engine/SKILL.md +273 -273
  16. package/skills/ai-engine/references/ai-employees.md +48 -48
  17. package/skills/ai-engine/references/self-hosted-digital-human.md +59 -59
  18. package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +2 -2
  19. package/skills/app-store/SKILL.md +3 -3
  20. package/skills/business-blueprint/SKILL.md +193 -193
  21. package/skills/datasource-engine/SKILL.md +93 -93
  22. package/skills/dos-orm/SKILL.md +105 -105
  23. package/skills/dos-orm/references/api-reference.md +229 -229
  24. package/skills/email-engine/SKILL.md +81 -81
  25. package/skills/email-engine/references/v8-email.md +34 -34
  26. package/skills/job-engine/SKILL.md +176 -176
  27. package/skills/message-notification/SKILL.md +156 -156
  28. package/skills/message-notification/references/contracts.md +102 -102
  29. package/skills/microi/SKILL.md +14 -14
  30. package/skills/microi-ai-app-auth.js +1 -1
  31. package/skills/microi-ai-application/SKILL.md +115 -115
  32. package/skills/microi-ai-application/references/frontend-baseline.md +164 -164
  33. package/skills/microi-client-frontend/SKILL.md +19 -19
  34. package/skills/microi-client-frontend/references/progressive-01-3-/345/212/250/346/200/201/346/214/211/351/222/256/347/263/273/347/273/237.md +10 -10
  35. package/skills/microi-client-frontend/references/progressive-02-8-/350/277/220/350/241/214/346/227/266/351/253/230/351/242/221/345/235/221/345/244/215/347/233/230.md +10 -10
  36. package/skills/microi-client-frontend/references/progressive-03-vue3-/345/211/215/347/253/257/345/276/256/346/234/215/345/212/241/345/256/277/344/270/273/350/247/204/345/210/231.md +10 -10
  37. package/skills/microi-codex/SKILL.md +130 -130
  38. package/skills/microi-codex-installer/SKILL.md +233 -233
  39. package/skills/microi-datasource-mapping/SKILL.md +122 -122
  40. package/skills/microi-db-schema/SKILL.md +175 -175
  41. package/skills/microi-db-schema/references/core-tables.md +695 -695
  42. package/skills/microi-db-schema/references/form-component-options.md +256 -256
  43. package/skills/microi-db-schema/references/schema-overview.md +202 -202
  44. package/skills/microi-db-schema/references/schema.md +646 -646
  45. package/skills/microi-db-schema/references/table-catalog.md +1599 -1599
  46. package/skills/microi-deployment/SKILL.md +260 -260
  47. package/skills/microi-deployment/references/deployment-matrix.md +109 -109
  48. package/skills/microi-docs-coverage/SKILL.md +133 -133
  49. package/skills/microi-docs-coverage/references/capability-map.md +91 -91
  50. package/skills/microi-form-engine/SKILL.md +338 -338
  51. package/skills/microi-form-engine/references/component-catalog.md +218 -218
  52. package/skills/microi-form-engine/references/data-source-events.md +124 -124
  53. package/skills/microi-left-right-layout/SKILL.md +141 -141
  54. package/skills/microi-microservice/SKILL.md +353 -348
  55. package/skills/microi-microservice/references/runtime-delivery.md +282 -282
  56. package/skills/microi-solution-quotation/SKILL.md +78 -78
  57. package/skills/microi-sso/SKILL.md +102 -102
  58. package/skills/microi-sso/references/acceptance.md +51 -51
  59. package/skills/microi-sso/references/configuration-and-security.md +53 -53
  60. package/skills/microi-sso/references/inbound.md +53 -53
  61. package/skills/microi-sso/references/outbound.md +43 -43
  62. package/skills/microi-system-delivery/SKILL.md +18 -16
  63. package/skills/microi-system-delivery/references/context-quality.md +3 -3
  64. package/skills/microi-system-delivery/references/progressive-01-/346/240/207/345/207/206/345/267/245/344/275/234/346/265/201.md +11 -11
  65. package/skills/microi-system-delivery/references/progressive-02-/350/207/252/345/212/250/345/214/226/346/265/213/350/257/225/345/277/205/351/241/273/350/246/206/347/233/226/347/232/204/345/235/221.md +12 -12
  66. package/skills/microi-system-delivery/references/progressive-03-/345/256/211/345/205/250/344/270/216/350/267/250/347/253/257/351/252/214/346/224/266.md +8 -8
  67. package/skills/module-engine/SKILL.md +297 -297
  68. package/skills/module-engine/references/module-config.md +204 -204
  69. package/skills/ocr-engine/SKILL.md +113 -113
  70. package/skills/page-engine/SKILL.md +24 -24
  71. package/skills/page-engine/references/progressive-01-/346/211/200/346/234/211/347/273/204/344/273/266/347/261/273/345/236/213.md +10 -10
  72. package/skills/page-engine/references/progressive-02-/347/211/210/346/234/254/345/216/206/345/217/262-/345/271/266/345/217/221/344/277/235/345/255/230/344/270/216/345/233/236/346/273/232.md +12 -12
  73. package/skills/performance-testing/SKILL.md +227 -227
  74. package/skills/print-engine/SKILL.md +259 -259
  75. package/skills/production-readonly-audit/SKILL.md +41 -41
  76. package/skills/report-engine/SKILL.md +83 -83
  77. package/skills/search-engine/SKILL.md +75 -75
  78. package/skills/spider-engine/SKILL.md +190 -190
  79. package/skills/system-observability/SKILL.md +264 -264
  80. package/skills/system-observability/references/memory-incident-triage.md +77 -77
  81. package/skills/translate-engine/SKILL.md +140 -140
  82. package/skills/ui-design/assets/templates/MCI-DESIGN.md +206 -206
  83. package/skills/ui-design/references/design-pattern-library.md +184 -184
  84. package/skills/ui-design/references/mci-design-contract.md +163 -163
  85. package/skills/ui-design/references/motion-and-media.md +78 -78
  86. package/skills/ui-design/references/product-flow-recipes.md +94 -94
  87. package/skills/uniapp-mall-assets/SKILL.md +176 -176
  88. package/skills/unity-integration/SKILL.md +178 -178
  89. package/skills/unity-integration/references/ai-app-delivery.md +119 -119
  90. package/skills/unity-integration/references/sdk-api.md +82 -82
  91. package/skills/unity-integration/references/toolbox-migration.md +66 -66
  92. package/skills/unity-integration/references/webgl-hosting.md +57 -57
  93. package/skills/v8-cache-pattern/SKILL.md +320 -320
  94. package/skills/v8-debugging/SKILL.md +284 -284
  95. package/skills/v8-explorer-tree/SKILL.md +228 -228
  96. package/skills/v8-file-upload/SKILL.md +1 -1
  97. package/skills/v8-file-upload/references/cdn-alias-repair.md +13 -13
  98. package/skills/v8-formengine-http/SKILL.md +238 -238
  99. package/skills/v8-frontend-events/references/bluetooth-print-api.md +135 -135
  100. package/skills/v8-frontend-events/references/bluetooth-print.md +258 -258
  101. package/skills/v8-image-processing/SKILL.md +190 -190
  102. package/skills/v8-image-processing/references/api-reference.md +623 -623
  103. package/skills/v8-mongodb/SKILL.md +201 -201
  104. package/skills/v8-mq-mqtt/references/mqtt-production.md +352 -352
  105. package/skills/v8-saas-multi-tenant/SKILL.md +305 -305
  106. package/skills/v8-sql-query/SKILL.md +302 -302
  107. package/skills/v8-tcp-integration/SKILL.md +158 -158
  108. package/skills/v8-template-engine/SKILL.md +167 -167
  109. package/skills/v8-utilities/SKILL.md +104 -104
  110. package/skills/v8-utilities/references/client-api-index.md +143 -143
  111. package/skills/v8-utilities/references/platform-http-routes.md +83 -83
  112. package/skills/v8-utilities/references/server-api-index.md +188 -188
  113. package/skills/v8-workflow/references/workflow-configuration.md +49 -49
  114. package/skills/vision-engine/SKILL.md +160 -160
  115. package/skills/vision-engine/references/architecture-and-acceptance.md +194 -194
  116. package/skills/workspace-conventions/SKILL.md +9 -3
  117. package/skills/workspace-conventions/references/progressive-01-/347/211/210/346/234/254/346/233/264/346/226/260/346/227/245/345/277/227/344/277/235/346/212/244/350/247/204/345/210/231-/345/274/272/345/210/266.md +33 -33
  118. package/skills/workspace-conventions/references/progressive-02-microi-net-api-/346/234/254/345/234/260/345/220/257/345/212/250/347/272/246/345/256/232.md +34 -34
  119. package/skills/workspace-conventions/references/progressive-03-cli-/344/270/216-ide-/346/217/222/344/273/266/351/224/231/347/211/210/345/205/261/345/255/230/347/272/246/345/256/232.md +6 -6
@@ -1,201 +1,201 @@
1
- ---
2
- name: v8-mongodb
3
- description: Microi V8 MongoDB 指南。用于使用 V8.MongoDb AddFormData、UptFormData、UptFormDataByWhere、DelFormData、DelFormDataByWhere、GetFormData、GetTableData、对象过滤和文档 Id。
4
- ---
5
-
6
- > **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
7
-
8
- # Microi V8 MongoDB 操作
9
-
10
- 你正在开发 Microi 吾码平台的 V8 引擎代码,需要使用 MongoDB 存储非结构化数据(如日志、IoT 数据、大文档等)。
11
-
12
- ## V8.MongoDb API
13
-
14
- ### 存量 MongoDB 兼容诊断
15
-
16
- - `reports wire version 6 ... requires at least 9` 是驱动与服务端不兼容,不是日志为空,也不是 Token 失效。先记录原始错误和服务端真实协议,不能把 wire version 6 推断成 MongoDB 4.2。
17
- - 平台兼容镜像以含安全修复的驱动 3.11.2 构建,恢复平台 CRUD/日志所需的 MongoDB 3.6 协议路径;不是降级至 2.30,也不声明上游继续维护 3.6。来源、单文件补丁和摘要维护在 `Microi.Server/Microi.MongoDB.Driver/`。
18
- - 普通开发与全部默认测试先从当前 MCP 同源只读诊断发现真实 MongoDB 版本,沿已授权隔离范围执行认证、BSON、读写、索引、幂等重放、游标和租户隔离断言;不为旧版或其它版本重复询问、建库或新增服务。配置标签和 wire version 不能冒充实际版本回读。
19
- - 只有任务明确修改或验证存量兼容层、旧版本缺陷或跨版本升级时,才按该兼容目标扩展真实矩阵(例如需支持的 3.6 协议端与当前 MCP 实际版本),不固定假设当前端是 7.x。每个版本必须独立回读和实际执行,未执行记未覆盖;不得只验证编译或 ping,也不得把驱动兼容当作修复旧数据库服务端自身漏洞。
20
- - C# 驱动改动需要更新后端镜像才生效。镜像更新后通过 `microi_query_system_observability` 回读日志、队列持久化和错误状态;查询失败应原样报错,禁止返回成功空表。
21
-
22
- | 方法 | 说明 |
23
- |------|------|
24
- | `V8.MongoDb.AddFormData({...})` | 新增文档 |
25
- | `V8.MongoDb.UptFormData({...})` | 修改文档(按 Id) |
26
- | `V8.MongoDb.UptFormDataByWhere({...})` | 按非空 `_Where` 批量修改,禁止修改 `_id` |
27
- | `V8.MongoDb.DelFormData({...})` | 删除文档(按 Id) |
28
- | `V8.MongoDb.DelFormDataByWhere({...})` | 按非空 `_Where` 批量删除 |
29
- | `V8.MongoDb.GetFormData({...})` | 查询单个文档(按 Id) |
30
- | `V8.MongoDb.GetTableData({...})` | 查询文档列表 |
31
- | `V8.MongoDb.NewId()` | 生成 MongoDB Id |
32
-
33
- ## 新增文档
34
-
35
- ```javascript
36
- var newId = V8.MongoDb.NewId();
37
- V8.MongoDb.AddFormData({
38
- DbName: 'sys_log_2024', // 数据库名
39
- TableName: 'log_2024_12', // 集合(表)名
40
- Id: newId, // 可选,不指定自动生成
41
- _FormData: {
42
- UserId: V8.CurrentUser.Id,
43
- Action: '登录',
44
- IP: '192.168.1.1',
45
- CreateTime: DateNow('yyyy-MM-dd HH:mm:ss')
46
- }
47
- });
48
- ```
49
-
50
- ## 修改文档
51
-
52
- ```javascript
53
- V8.MongoDb.UptFormData({
54
- DbName: 'sys_log_2024',
55
- TableName: 'log_2024_12',
56
- Id: V8.Param.id, // 必传
57
- _FormData: {
58
- Action: '更新操作',
59
- UpdateTime: DateNow('yyyy-MM-dd HH:mm:ss')
60
- }
61
- });
62
- ```
63
-
64
- ### 按条件批量修改
65
-
66
- ```javascript
67
- var result = V8.MongoDb.UptFormDataByWhere({
68
- DbName: 'diy_chat_' + V8.OsClient.toLowerCase(),
69
- TableName: 'chat_' + DateNow('yyyy'),
70
- _Where: [
71
- ['FromUserId', '=', V8.Param.PeerUserId],
72
- ['ToUserId', '=', V8.CurrentUser.Id],
73
- ['IsRead', '=', false]
74
- ],
75
- _FormData: { IsRead: true }
76
- });
77
- ```
78
-
79
- `_Where` 缺失、为空或包含无效条件时必须返回失败,不得执行全集合更新。`_FormData` 禁止设置 `_id` 或 `_id.*`。返回值的 `Data` 包含 `MatchedCount` 和 `ModifiedCount`。
80
-
81
- ## 删除文档
82
-
83
- ```javascript
84
- V8.MongoDb.DelFormData({
85
- DbName: 'sys_log_2024',
86
- TableName: 'log_2024_12',
87
- Id: V8.Param.id // 必传
88
- });
89
- ```
90
-
91
- ### 按条件批量删除
92
-
93
- ```javascript
94
- var result = V8.MongoDb.DelFormDataByWhere({
95
- DbName: 'diy_chat_' + V8.OsClient.toLowerCase(),
96
- TableName: 'chat_last_contact',
97
- _Where: [
98
- ['UserId', '=', V8.CurrentUser.Id],
99
- ['ContactUserId', '=', V8.Param.PeerUserId]
100
- ]
101
- });
102
- ```
103
-
104
- 删除条件必须包含当前权威用户/资源边界,不能只用可伪造的前端参数。返回值的 `Data` 包含 `DeletedCount`。
105
-
106
- ## 查询单个文档
107
-
108
- ```javascript
109
- var result = V8.MongoDb.GetFormData({
110
- DbName: 'sys_log_2024',
111
- TableName: 'log_2024_12',
112
- Id: V8.Param.id // 必传
113
- });
114
- ```
115
-
116
- ## 查询文档列表
117
-
118
- ```javascript
119
- var result = V8.MongoDb.GetTableData({
120
- DbName: 'sys_log_2024',
121
- TableName: 'log_2024_12',
122
- _Where: [
123
- ['Type', '=', '访问菜单'],
124
- ['OR', 'Type', '=', '点击V8按钮']
125
- ],
126
- _OrderBy: 'CreateTime',
127
- _OrderByType: 'DESC',
128
- _PageIndex: 1,
129
- _PageSize: 20
130
- });
131
- ```
132
-
133
- `GetFormData` 和 `GetTableData` 属于 dynamic 无模式读取。服务端会在 MongoDB 投影阶段过滤 BSON 内部 `_t` CLR 类型判别字段,避免存量强类型 C# 写入留下的旧类型名称触发反序列化失败。`_t` 不是 V8 业务契约;业务需要类型标记时应使用自有字段(例如 `DocumentType`),不得读取、筛选或依赖 `_t`。强类型 C# MongoDB 模型仍按自身的多态映射处理。
134
-
135
- ## 实战模式
136
-
137
- ### IoT 设备日志存储
138
-
139
- ```javascript
140
- // 接收 MQTT 消息后存入 MongoDB
141
- var eventName = V8.EventName;
142
- if (eventName === 'MessageReceived') {
143
- V8.MongoDb.AddFormData({
144
- DbName: 'iot_data',
145
- TableName: 'device_log_' + DateNow('yyyy_MM'),
146
- _FormData: {
147
- DeviceId: V8.MQTT.ClientId,
148
- Topic: V8.MQTT.Topic,
149
- Payload: V8.MQTT.Payload,
150
- Timestamp: DateNow('yyyy-MM-dd HH:mm:ss')
151
- }
152
- });
153
- }
154
- ```
155
-
156
- ### 操作审计日志
157
-
158
- ```javascript
159
- // 在 SubmitAfterServerV8.js 中记录审计日志到 MongoDB
160
- V8.MongoDb.AddFormData({
161
- DbName: 'audit_log',
162
- TableName: 'form_audit_' + DateNow('yyyy'),
163
- _FormData: {
164
- TableName: V8.TableModel.Name,
165
- Action: V8.FormSubmitAction,
166
- DataId: V8.Form.Id,
167
- UserId: V8.CurrentUser.Id,
168
- UserName: V8.CurrentUser.Name,
169
- OldData: V8.FormSubmitAction === 'Update' ? JSON.stringify(V8.OldForm) : null,
170
- NewData: JSON.stringify(V8.Form),
171
- CreateTime: DateNow('yyyy-MM-dd HH:mm:ss')
172
- }
173
- });
174
- ```
175
-
176
- ### 按月分表查询
177
-
178
- ```javascript
179
- // 查询指定月份的日志
180
- var month = V8.Param.month || DateNow('yyyy_MM');
181
- var result = V8.MongoDb.GetTableData({
182
- DbName: 'sys_log_2024',
183
- TableName: 'log_' + month,
184
- _Where: [
185
- ['UserId', '=', V8.CurrentUser.Id]
186
- ]
187
- });
188
-
189
- return { Code: 1, Data: result };
190
- ```
191
-
192
- ## 注意事项
193
-
194
- - MongoDB 参数统一使用**对象格式**:`{ DbName, TableName, Id, _FormData, _Where, _OrderBy, _OrderByType }`
195
- - `DbName` 是 MongoDB 数据库名,`TableName` 是集合名
196
- - `_Where` 条件语法与 `V8.FormEngine` 一致
197
- - 批量写入仅接受安全字段名、已知操作符和非空条件;条件中的租户、用户和资源 Id 应来自 `V8.OsClient` / `V8.CurrentUser` / 权威回查,不得信任 `V8.Param` 中的同名身份字段
198
- - 非主库 V8 运行时会把 MongoDB 操作绑定到当前租户;显式传入其它 `OsClient` 不能跨租户
199
- - 适合存储日志、IoT 数据、大文档等非结构化 / 海量数据
200
- - 建议按时间分库分表(如 `log_2024_01`),便于清理历史数据
201
- - MongoDB 操作不参与 `V8.DbTrans` 事务。批量写入 `Code=1` 后即是已提交事实;后续 Hook/投递失败应返回警告或进入补偿,不得返回“未发生”导致盲目重试,重试必须有稳定业务 Id 幂等
1
+ ---
2
+ name: v8-mongodb
3
+ description: Microi V8 MongoDB 指南。用于使用 V8.MongoDb AddFormData、UptFormData、UptFormDataByWhere、DelFormData、DelFormDataByWhere、GetFormData、GetTableData、对象过滤和文档 Id。
4
+ ---
5
+
6
+ > **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
7
+
8
+ # Microi V8 MongoDB 操作
9
+
10
+ 你正在开发 Microi 吾码平台的 V8 引擎代码,需要使用 MongoDB 存储非结构化数据(如日志、IoT 数据、大文档等)。
11
+
12
+ ## V8.MongoDb API
13
+
14
+ ### 存量 MongoDB 兼容诊断
15
+
16
+ - `reports wire version 6 ... requires at least 9` 是驱动与服务端不兼容,不是日志为空,也不是 Token 失效。先记录原始错误和服务端真实协议,不能把 wire version 6 推断成 MongoDB 4.2。
17
+ - 平台兼容镜像以含安全修复的驱动 3.11.2 构建,恢复平台 CRUD/日志所需的 MongoDB 3.6 协议路径;不是降级至 2.30,也不声明上游继续维护 3.6。来源、单文件补丁和摘要维护在 `Microi.Server/Microi.MongoDB.Driver/`。
18
+ - 普通开发与全部默认测试先从当前 MCP 同源只读诊断发现真实 MongoDB 版本,沿已授权隔离范围执行认证、BSON、读写、索引、幂等重放、游标和租户隔离断言;不为旧版或其它版本重复询问、建库或新增服务。配置标签和 wire version 不能冒充实际版本回读。
19
+ - 只有任务明确修改或验证存量兼容层、旧版本缺陷或跨版本升级时,才按该兼容目标扩展真实矩阵(例如需支持的 3.6 协议端与当前 MCP 实际版本),不固定假设当前端是 7.x。每个版本必须独立回读和实际执行,未执行记未覆盖;不得只验证编译或 ping,也不得把驱动兼容当作修复旧数据库服务端自身漏洞。
20
+ - C# 驱动改动需要更新后端镜像才生效。镜像更新后通过 `microi_query_system_observability` 回读日志、队列持久化和错误状态;查询失败应原样报错,禁止返回成功空表。
21
+
22
+ | 方法 | 说明 |
23
+ |------|------|
24
+ | `V8.MongoDb.AddFormData({...})` | 新增文档 |
25
+ | `V8.MongoDb.UptFormData({...})` | 修改文档(按 Id) |
26
+ | `V8.MongoDb.UptFormDataByWhere({...})` | 按非空 `_Where` 批量修改,禁止修改 `_id` |
27
+ | `V8.MongoDb.DelFormData({...})` | 删除文档(按 Id) |
28
+ | `V8.MongoDb.DelFormDataByWhere({...})` | 按非空 `_Where` 批量删除 |
29
+ | `V8.MongoDb.GetFormData({...})` | 查询单个文档(按 Id) |
30
+ | `V8.MongoDb.GetTableData({...})` | 查询文档列表 |
31
+ | `V8.MongoDb.NewId()` | 生成 MongoDB Id |
32
+
33
+ ## 新增文档
34
+
35
+ ```javascript
36
+ var newId = V8.MongoDb.NewId();
37
+ V8.MongoDb.AddFormData({
38
+ DbName: 'sys_log_2024', // 数据库名
39
+ TableName: 'log_2024_12', // 集合(表)名
40
+ Id: newId, // 可选,不指定自动生成
41
+ _FormData: {
42
+ UserId: V8.CurrentUser.Id,
43
+ Action: '登录',
44
+ IP: '192.168.1.1',
45
+ CreateTime: DateNow('yyyy-MM-dd HH:mm:ss')
46
+ }
47
+ });
48
+ ```
49
+
50
+ ## 修改文档
51
+
52
+ ```javascript
53
+ V8.MongoDb.UptFormData({
54
+ DbName: 'sys_log_2024',
55
+ TableName: 'log_2024_12',
56
+ Id: V8.Param.id, // 必传
57
+ _FormData: {
58
+ Action: '更新操作',
59
+ UpdateTime: DateNow('yyyy-MM-dd HH:mm:ss')
60
+ }
61
+ });
62
+ ```
63
+
64
+ ### 按条件批量修改
65
+
66
+ ```javascript
67
+ var result = V8.MongoDb.UptFormDataByWhere({
68
+ DbName: 'diy_chat_' + V8.OsClient.toLowerCase(),
69
+ TableName: 'chat_' + DateNow('yyyy'),
70
+ _Where: [
71
+ ['FromUserId', '=', V8.Param.PeerUserId],
72
+ ['ToUserId', '=', V8.CurrentUser.Id],
73
+ ['IsRead', '=', false]
74
+ ],
75
+ _FormData: { IsRead: true }
76
+ });
77
+ ```
78
+
79
+ `_Where` 缺失、为空或包含无效条件时必须返回失败,不得执行全集合更新。`_FormData` 禁止设置 `_id` 或 `_id.*`。返回值的 `Data` 包含 `MatchedCount` 和 `ModifiedCount`。
80
+
81
+ ## 删除文档
82
+
83
+ ```javascript
84
+ V8.MongoDb.DelFormData({
85
+ DbName: 'sys_log_2024',
86
+ TableName: 'log_2024_12',
87
+ Id: V8.Param.id // 必传
88
+ });
89
+ ```
90
+
91
+ ### 按条件批量删除
92
+
93
+ ```javascript
94
+ var result = V8.MongoDb.DelFormDataByWhere({
95
+ DbName: 'diy_chat_' + V8.OsClient.toLowerCase(),
96
+ TableName: 'chat_last_contact',
97
+ _Where: [
98
+ ['UserId', '=', V8.CurrentUser.Id],
99
+ ['ContactUserId', '=', V8.Param.PeerUserId]
100
+ ]
101
+ });
102
+ ```
103
+
104
+ 删除条件必须包含当前权威用户/资源边界,不能只用可伪造的前端参数。返回值的 `Data` 包含 `DeletedCount`。
105
+
106
+ ## 查询单个文档
107
+
108
+ ```javascript
109
+ var result = V8.MongoDb.GetFormData({
110
+ DbName: 'sys_log_2024',
111
+ TableName: 'log_2024_12',
112
+ Id: V8.Param.id // 必传
113
+ });
114
+ ```
115
+
116
+ ## 查询文档列表
117
+
118
+ ```javascript
119
+ var result = V8.MongoDb.GetTableData({
120
+ DbName: 'sys_log_2024',
121
+ TableName: 'log_2024_12',
122
+ _Where: [
123
+ ['Type', '=', '访问菜单'],
124
+ ['OR', 'Type', '=', '点击V8按钮']
125
+ ],
126
+ _OrderBy: 'CreateTime',
127
+ _OrderByType: 'DESC',
128
+ _PageIndex: 1,
129
+ _PageSize: 20
130
+ });
131
+ ```
132
+
133
+ `GetFormData` 和 `GetTableData` 属于 dynamic 无模式读取。服务端会在 MongoDB 投影阶段过滤 BSON 内部 `_t` CLR 类型判别字段,避免存量强类型 C# 写入留下的旧类型名称触发反序列化失败。`_t` 不是 V8 业务契约;业务需要类型标记时应使用自有字段(例如 `DocumentType`),不得读取、筛选或依赖 `_t`。强类型 C# MongoDB 模型仍按自身的多态映射处理。
134
+
135
+ ## 实战模式
136
+
137
+ ### IoT 设备日志存储
138
+
139
+ ```javascript
140
+ // 接收 MQTT 消息后存入 MongoDB
141
+ var eventName = V8.EventName;
142
+ if (eventName === 'MessageReceived') {
143
+ V8.MongoDb.AddFormData({
144
+ DbName: 'iot_data',
145
+ TableName: 'device_log_' + DateNow('yyyy_MM'),
146
+ _FormData: {
147
+ DeviceId: V8.MQTT.ClientId,
148
+ Topic: V8.MQTT.Topic,
149
+ Payload: V8.MQTT.Payload,
150
+ Timestamp: DateNow('yyyy-MM-dd HH:mm:ss')
151
+ }
152
+ });
153
+ }
154
+ ```
155
+
156
+ ### 操作审计日志
157
+
158
+ ```javascript
159
+ // 在 SubmitAfterServerV8.js 中记录审计日志到 MongoDB
160
+ V8.MongoDb.AddFormData({
161
+ DbName: 'audit_log',
162
+ TableName: 'form_audit_' + DateNow('yyyy'),
163
+ _FormData: {
164
+ TableName: V8.TableModel.Name,
165
+ Action: V8.FormSubmitAction,
166
+ DataId: V8.Form.Id,
167
+ UserId: V8.CurrentUser.Id,
168
+ UserName: V8.CurrentUser.Name,
169
+ OldData: V8.FormSubmitAction === 'Update' ? JSON.stringify(V8.OldForm) : null,
170
+ NewData: JSON.stringify(V8.Form),
171
+ CreateTime: DateNow('yyyy-MM-dd HH:mm:ss')
172
+ }
173
+ });
174
+ ```
175
+
176
+ ### 按月分表查询
177
+
178
+ ```javascript
179
+ // 查询指定月份的日志
180
+ var month = V8.Param.month || DateNow('yyyy_MM');
181
+ var result = V8.MongoDb.GetTableData({
182
+ DbName: 'sys_log_2024',
183
+ TableName: 'log_' + month,
184
+ _Where: [
185
+ ['UserId', '=', V8.CurrentUser.Id]
186
+ ]
187
+ });
188
+
189
+ return { Code: 1, Data: result };
190
+ ```
191
+
192
+ ## 注意事项
193
+
194
+ - MongoDB 参数统一使用**对象格式**:`{ DbName, TableName, Id, _FormData, _Where, _OrderBy, _OrderByType }`
195
+ - `DbName` 是 MongoDB 数据库名,`TableName` 是集合名
196
+ - `_Where` 条件语法与 `V8.FormEngine` 一致
197
+ - 批量写入仅接受安全字段名、已知操作符和非空条件;条件中的租户、用户和资源 Id 应来自 `V8.OsClient` / `V8.CurrentUser` / 权威回查,不得信任 `V8.Param` 中的同名身份字段
198
+ - 非主库 V8 运行时会把 MongoDB 操作绑定到当前租户;显式传入其它 `OsClient` 不能跨租户
199
+ - 适合存储日志、IoT 数据、大文档等非结构化 / 海量数据
200
+ - 建议按时间分库分表(如 `log_2024_01`),便于清理历史数据
201
+ - MongoDB 操作不参与 `V8.DbTrans` 事务。批量写入 `Code=1` 后即是已提交事实;后续 Hook/投递失败应返回警告或进入补偿,不得返回“未发生”导致盲目重试,重试必须有稳定业务 Id 幂等