wok-server 0.5.0 → 0.7.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.
- package/README.en.md +61 -0
- package/README.md +44 -29
- package/dist/cache/cache.js +98 -98
- package/dist/cache/config.js +19 -19
- package/dist/cache/index.js +27 -27
- package/dist/cache/purge-task.js +46 -46
- package/dist/cache/stat.js +47 -47
- package/dist/config/convert.js +36 -36
- package/dist/config/exception.js +14 -14
- package/dist/config/index.js +81 -81
- package/dist/http-client/index.js +136 -136
- package/dist/i18n/ar.js +17 -17
- package/dist/i18n/de.js +17 -17
- package/dist/i18n/en-us.js +17 -17
- package/dist/i18n/es.js +17 -17
- package/dist/i18n/fr.js +17 -17
- package/dist/i18n/i18n.js +231 -231
- package/dist/i18n/index.js +52 -52
- package/dist/i18n/ja.js +17 -17
- package/dist/i18n/ko.js +17 -17
- package/dist/i18n/msg.js +2 -2
- package/dist/i18n/pt.js +17 -17
- package/dist/i18n/ru.js +17 -17
- package/dist/i18n/tag.js +18 -18
- package/dist/i18n/zh-HK.js +17 -17
- package/dist/i18n/zh-TW.js +17 -17
- package/dist/i18n/zh-cn.js +17 -17
- package/dist/index.js +14 -14
- package/dist/lock/index.js +114 -114
- package/dist/log/config.js +35 -35
- package/dist/log/date.js +21 -21
- package/dist/log/file.js +198 -198
- package/dist/log/index.js +135 -135
- package/dist/log/level.js +33 -33
- package/dist/log/log.js +56 -56
- package/dist/log/store.js +19 -19
- package/dist/mongodb/collection.js +2 -2
- package/dist/mongodb/config.js +34 -34
- package/dist/mongodb/doc.js +2 -2
- package/dist/mongodb/exception.js +14 -14
- package/dist/mongodb/index.js +58 -58
- package/dist/mongodb/manager/base.js +563 -563
- package/dist/mongodb/manager/index.js +63 -63
- package/dist/mongodb/manager/tx-strict.js +84 -84
- package/dist/mongodb/manager/tx.js +30 -30
- package/dist/mongodb/migration.js +52 -52
- package/dist/mvc/access-log.js +33 -33
- package/dist/mvc/config.js +27 -27
- package/dist/mvc/exchange.js +113 -113
- package/dist/mvc/handler/index.js +7 -6
- package/dist/mvc/handler/json.js +65 -65
- package/dist/mvc/handler/restful.js +35 -35
- package/dist/mvc/handler/sse.js +65 -0
- package/dist/mvc/handler/upload.js +31 -31
- package/dist/mvc/index.js +50 -50
- package/dist/mvc/interceptor.js +2 -2
- package/dist/mvc/query.js +43 -43
- package/dist/mvc/render/file.js +132 -132
- package/dist/mvc/render/html/html.js +90 -90
- package/dist/mvc/render/html/index.js +18 -18
- package/dist/mvc/render/html/style.js +2 -2
- package/dist/mvc/render/index.js +7 -7
- package/dist/mvc/render/json.js +26 -26
- package/dist/mvc/render/text.js +16 -16
- package/dist/mvc/router.js +2 -2
- package/dist/mvc/server.js +272 -272
- package/dist/mvc/static/header.js +67 -67
- package/dist/mvc/static/index.js +6 -6
- package/dist/mvc/static/mime-type.js +84 -84
- package/dist/mvc/static/server-cache-config.js +66 -66
- package/dist/mvc/static/server-cache.js +133 -133
- package/dist/mvc/static/static-handler.js +372 -372
- package/dist/mysql/config.js +51 -51
- package/dist/mysql/exception.js +14 -14
- package/dist/mysql/index.js +87 -87
- package/dist/mysql/manager/base.js +278 -239
- package/dist/mysql/manager/index.js +107 -107
- package/dist/mysql/manager/ops/count.js +20 -20
- package/dist/mysql/manager/ops/criteria.js +381 -356
- package/dist/mysql/manager/ops/delete.js +59 -65
- package/dist/mysql/manager/ops/exist.js +26 -26
- package/dist/mysql/manager/ops/find.js +149 -169
- package/dist/mysql/manager/ops/index.js +16 -14
- package/dist/mysql/manager/ops/insert.js +132 -106
- package/dist/mysql/manager/ops/modify.js +10 -10
- package/dist/mysql/manager/ops/order-by.js +28 -0
- package/dist/mysql/manager/ops/paginate.js +48 -23
- package/dist/mysql/manager/ops/query.js +9 -9
- package/dist/mysql/manager/ops/update.js +222 -216
- package/dist/mysql/manager/ops/upsert.js +178 -0
- package/dist/mysql/manager/ops/utils.js +28 -24
- package/dist/mysql/manager/tx-strict.js +103 -103
- package/dist/mysql/manager/tx.js +30 -30
- package/dist/mysql/manager/utils.js +56 -56
- package/dist/mysql/migration.js +136 -136
- package/dist/mysql/table-info.js +8 -8
- package/dist/task/daily.js +59 -59
- package/dist/task/fixed-delay.js +38 -38
- package/dist/task/fixed-rate.js +42 -42
- package/dist/task/index.js +9 -9
- package/dist/task/task.js +56 -56
- package/dist/validation/exception.js +36 -36
- package/dist/validation/index.js +40 -40
- package/dist/validation/validator/array.js +34 -34
- package/dist/validation/validator/enum.js +28 -28
- package/dist/validation/validator/index.js +14 -14
- package/dist/validation/validator/length.js +40 -40
- package/dist/validation/validator/max-length.js +35 -35
- package/dist/validation/validator/max.js +29 -29
- package/dist/validation/validator/min-length.js +33 -33
- package/dist/validation/validator/min.js +29 -29
- package/dist/validation/validator/not-blank.js +33 -33
- package/dist/validation/validator/not-null.js +21 -21
- package/dist/validation/validator/plain-obj.js +32 -32
- package/dist/validation/validator/regexp.js +34 -34
- package/documentation/en/cache.md +56 -0
- package/documentation/en/config.md +96 -0
- package/documentation/en/engineering.md +256 -0
- package/documentation/en/http-client.md +32 -0
- package/documentation/en/i18n.md +143 -0
- package/documentation/en/index.md +24 -0
- package/documentation/en/lock.md +51 -0
- package/documentation/en/log.md +109 -0
- package/documentation/en/mongodb.md +256 -0
- package/documentation/en/mvc.md +688 -0
- package/documentation/en/mysql.md +682 -0
- package/documentation/en/task.md +45 -0
- package/documentation/en/test.md +56 -0
- package/documentation/en/validate.md +130 -0
- package/documentation/zh-cn/mvc.md +66 -24
- package/documentation/zh-cn/mysql.md +146 -17
- package/package.json +4 -1
- package/skills/wok-server-api-rules/SKILL.md +350 -0
- package/skills/wok-server-cache/SKILL.md +216 -0
- package/skills/wok-server-code-navigation/SKILL.md +153 -0
- package/skills/wok-server-config/SKILL.md +200 -0
- package/skills/wok-server-getting-started/SKILL.md +123 -0
- package/skills/wok-server-getting-started/references/engineering.md +169 -0
- package/skills/wok-server-http-client/SKILL.md +164 -0
- package/skills/wok-server-i18n/SKILL.md +214 -0
- package/skills/wok-server-lock/SKILL.md +144 -0
- package/skills/wok-server-log/SKILL.md +218 -0
- package/skills/wok-server-mongodb/SKILL.md +235 -0
- package/skills/wok-server-mvc/SKILL.md +251 -0
- package/skills/wok-server-mvc/references/respond-html.md +157 -0
- package/skills/wok-server-mvc/references/sse.md +121 -0
- package/skills/wok-server-mvc/references/static-files.md +47 -0
- package/skills/wok-server-mvc/references/upload.md +62 -0
- package/skills/wok-server-mvc/references/websocket.md +30 -0
- package/skills/wok-server-mysql/SKILL.md +388 -0
- package/skills/wok-server-mysql/references/multi-datasource.md +76 -0
- package/skills/wok-server-mysql/references/version-control.md +22 -0
- package/skills/wok-server-task/SKILL.md +158 -0
- package/skills/wok-server-validate/SKILL.md +167 -0
- package/src/cache/cache.ts +118 -0
- package/src/cache/config.ts +53 -0
- package/src/cache/index.ts +27 -0
- package/src/cache/purge-task.ts +53 -0
- package/src/cache/stat.ts +47 -0
- package/src/config/convert.ts +27 -0
- package/src/config/exception.ts +8 -0
- package/src/config/index.ts +92 -0
- package/src/http-client/index.ts +202 -0
- package/src/i18n/ar.ts +16 -0
- package/src/i18n/de.ts +16 -0
- package/src/i18n/en-us.ts +16 -0
- package/src/i18n/es.ts +16 -0
- package/src/i18n/fr.ts +16 -0
- package/src/i18n/i18n.ts +230 -0
- package/src/i18n/index.ts +50 -0
- package/src/i18n/ja.ts +16 -0
- package/src/i18n/ko.ts +16 -0
- package/src/i18n/msg.ts +50 -0
- package/src/i18n/pt.ts +16 -0
- package/src/i18n/ru.ts +16 -0
- package/src/i18n/tag.ts +18 -0
- package/src/i18n/zh-HK.ts +16 -0
- package/src/i18n/zh-TW.ts +16 -0
- package/src/i18n/zh-cn.ts +16 -0
- package/src/index.ts +11 -0
- package/src/lock/index.ts +164 -0
- package/src/log/config.ts +71 -0
- package/src/log/date.ts +19 -0
- package/src/log/file.ts +215 -0
- package/src/log/index.ts +136 -0
- package/src/log/level.ts +29 -0
- package/src/log/log.ts +77 -0
- package/src/log/store.ts +31 -0
- package/src/mongodb/collection.ts +25 -0
- package/src/mongodb/config.ts +69 -0
- package/src/mongodb/doc.ts +12 -0
- package/src/mongodb/exception.ts +8 -0
- package/src/mongodb/index.ts +71 -0
- package/src/mongodb/manager/base.ts +674 -0
- package/src/mongodb/manager/index.ts +80 -0
- package/src/mongodb/manager/tx-strict.ts +153 -0
- package/src/mongodb/manager/tx.ts +34 -0
- package/src/mongodb/migration.ts +66 -0
- package/src/mvc/access-log.ts +33 -0
- package/src/mvc/config.ts +70 -0
- package/src/mvc/exchange.ts +126 -0
- package/src/mvc/handler/index.ts +4 -0
- package/src/mvc/handler/json.ts +96 -0
- package/src/mvc/handler/restful.ts +39 -0
- package/src/mvc/handler/sse.ts +90 -0
- package/src/mvc/handler/upload.ts +54 -0
- package/src/mvc/index.ts +48 -0
- package/src/mvc/interceptor.ts +12 -0
- package/src/mvc/query.ts +36 -0
- package/src/mvc/render/file.ts +148 -0
- package/src/mvc/render/html/html.ts +187 -0
- package/src/mvc/render/html/index.ts +16 -0
- package/src/mvc/render/html/style.ts +1201 -0
- package/src/mvc/render/index.ts +4 -0
- package/src/mvc/render/json.ts +24 -0
- package/src/mvc/render/text.ts +14 -0
- package/src/mvc/router.ts +13 -0
- package/src/mvc/server.ts +315 -0
- package/src/mvc/static/header.ts +86 -0
- package/src/mvc/static/index.ts +3 -0
- package/src/mvc/static/mime-type.ts +81 -0
- package/src/mvc/static/server-cache-config.ts +92 -0
- package/src/mvc/static/server-cache.ts +171 -0
- package/src/mvc/static/static-handler.ts +445 -0
- package/src/mysql/config.ts +130 -0
- package/src/mysql/exception.ts +8 -0
- package/src/mysql/index.ts +88 -0
- package/src/mysql/manager/base.ts +332 -0
- package/src/mysql/manager/index.ts +112 -0
- package/src/mysql/manager/ops/count.ts +30 -0
- package/src/mysql/manager/ops/criteria.ts +446 -0
- package/src/mysql/manager/ops/delete.ts +91 -0
- package/src/mysql/manager/ops/exist.ts +41 -0
- package/src/mysql/manager/ops/find.ts +209 -0
- package/src/mysql/manager/ops/index.ts +13 -0
- package/src/mysql/manager/ops/insert.ts +158 -0
- package/src/mysql/manager/ops/modify.ts +14 -0
- package/src/mysql/manager/ops/order-by.ts +58 -0
- package/src/mysql/manager/ops/paginate.ts +100 -0
- package/src/mysql/manager/ops/query.ts +13 -0
- package/src/mysql/manager/ops/update.ts +318 -0
- package/src/mysql/manager/ops/upsert.ts +224 -0
- package/src/mysql/manager/ops/utils.ts +24 -0
- package/src/mysql/manager/tx-strict.ts +138 -0
- package/src/mysql/manager/tx.ts +31 -0
- package/src/mysql/manager/utils.ts +75 -0
- package/src/mysql/migration.ts +149 -0
- package/src/mysql/table-info.ts +41 -0
- package/src/task/daily.ts +70 -0
- package/src/task/fixed-delay.ts +45 -0
- package/src/task/fixed-rate.ts +49 -0
- package/src/task/index.ts +4 -0
- package/src/task/task.ts +70 -0
- package/src/validation/exception.ts +27 -0
- package/src/validation/index.ts +61 -0
- package/src/validation/validator/array.ts +32 -0
- package/src/validation/validator/enum.ts +25 -0
- package/src/validation/validator/index.ts +11 -0
- package/src/validation/validator/length.ts +42 -0
- package/src/validation/validator/max-length.ts +33 -0
- package/src/validation/validator/max.ts +26 -0
- package/src/validation/validator/min-length.ts +31 -0
- package/src/validation/validator/min.ts +26 -0
- package/src/validation/validator/not-blank.ts +31 -0
- package/src/validation/validator/not-null.ts +19 -0
- package/src/validation/validator/plain-obj.ts +30 -0
- package/src/validation/validator/regexp.ts +32 -0
- package/types/cache/cache.d.ts +52 -52
- package/types/cache/config.d.ts +32 -32
- package/types/cache/index.d.ts +2 -2
- package/types/cache/purge-task.d.ts +11 -11
- package/types/cache/stat.d.ts +26 -26
- package/types/config/convert.d.ts +6 -6
- package/types/config/exception.d.ts +7 -7
- package/types/config/index.d.ts +25 -25
- package/types/http-client/index.d.ts +71 -71
- package/types/i18n/ar.d.ts +2 -2
- package/types/i18n/de.d.ts +2 -2
- package/types/i18n/en-us.d.ts +2 -2
- package/types/i18n/es.d.ts +2 -2
- package/types/i18n/fr.d.ts +2 -2
- package/types/i18n/i18n.d.ts +102 -102
- package/types/i18n/index.d.ts +9 -9
- package/types/i18n/ja.d.ts +2 -2
- package/types/i18n/ko.d.ts +2 -2
- package/types/i18n/msg.d.ts +50 -50
- package/types/i18n/pt.d.ts +2 -2
- package/types/i18n/ru.d.ts +2 -2
- package/types/i18n/tag.d.ts +11 -11
- package/types/i18n/zh-HK.d.ts +2 -2
- package/types/i18n/zh-TW.d.ts +2 -2
- package/types/i18n/zh-cn.d.ts +2 -2
- package/types/index.d.ts +11 -11
- package/types/lock/index.d.ts +64 -64
- package/types/log/config.d.ts +35 -35
- package/types/log/date.d.ts +2 -2
- package/types/log/file.d.ts +13 -13
- package/types/log/index.d.ts +53 -53
- package/types/log/level.d.ts +14 -14
- package/types/log/log.d.ts +40 -40
- package/types/log/store.d.ts +19 -19
- package/types/mongodb/collection.d.ts +25 -25
- package/types/mongodb/config.d.ts +45 -45
- package/types/mongodb/doc.d.ts +11 -11
- package/types/mongodb/exception.d.ts +7 -7
- package/types/mongodb/index.d.ts +29 -29
- package/types/mongodb/manager/base.d.ts +188 -188
- package/types/mongodb/manager/index.d.ts +38 -38
- package/types/mongodb/manager/tx-strict.d.ts +41 -41
- package/types/mongodb/manager/tx.d.ts +21 -21
- package/types/mongodb/migration.d.ts +12 -12
- package/types/mvc/access-log.d.ts +7 -7
- package/types/mvc/config.d.ts +42 -42
- package/types/mvc/exchange.d.ts +72 -72
- package/types/mvc/handler/index.d.ts +4 -3
- package/types/mvc/handler/json.d.ts +44 -44
- package/types/mvc/handler/restful.d.ts +11 -11
- package/types/mvc/handler/sse.d.ts +34 -0
- package/types/mvc/handler/upload.d.ts +36 -36
- package/types/mvc/index.d.ts +22 -22
- package/types/mvc/interceptor.d.ts +11 -11
- package/types/mvc/query.d.ts +13 -13
- package/types/mvc/render/file.d.ts +10 -10
- package/types/mvc/render/html/html.d.ts +98 -98
- package/types/mvc/render/html/index.d.ts +11 -11
- package/types/mvc/render/html/style.d.ts +1201 -1201
- package/types/mvc/render/index.d.ts +4 -4
- package/types/mvc/render/json.d.ts +17 -17
- package/types/mvc/render/text.d.ts +10 -10
- package/types/mvc/router.d.ts +11 -11
- package/types/mvc/server.d.ts +90 -90
- package/types/mvc/static/header.d.ts +27 -27
- package/types/mvc/static/index.d.ts +3 -3
- package/types/mvc/static/mime-type.d.ts +2 -2
- package/types/mvc/static/server-cache-config.d.ts +30 -30
- package/types/mvc/static/server-cache.d.ts +76 -76
- package/types/mvc/static/static-handler.d.ts +77 -77
- package/types/mysql/config.d.ts +90 -90
- package/types/mysql/exception.d.ts +7 -7
- package/types/mysql/index.d.ts +16 -16
- package/types/mysql/manager/base.d.ts +196 -165
- package/types/mysql/manager/index.d.ts +36 -36
- package/types/mysql/manager/ops/count.d.ts +13 -13
- package/types/mysql/manager/ops/criteria.d.ts +144 -134
- package/types/mysql/manager/ops/delete.d.ts +47 -46
- package/types/mysql/manager/ops/exist.d.ts +6 -6
- package/types/mysql/manager/ops/find.d.ts +87 -86
- package/types/mysql/manager/ops/index.d.ts +12 -10
- package/types/mysql/manager/ops/insert.d.ts +32 -18
- package/types/mysql/manager/ops/modify.d.ts +3 -3
- package/types/mysql/manager/ops/order-by.d.ts +38 -0
- package/types/mysql/manager/ops/paginate.d.ts +53 -36
- package/types/mysql/manager/ops/query.d.ts +3 -3
- package/types/mysql/manager/ops/update.d.ts +99 -76
- package/types/mysql/manager/ops/upsert.d.ts +36 -0
- package/types/mysql/manager/ops/utils.d.ts +5 -5
- package/types/mysql/manager/tx-strict.d.ts +36 -36
- package/types/mysql/manager/tx.d.ts +15 -15
- package/types/mysql/manager/utils.d.ts +17 -17
- package/types/mysql/migration.d.ts +8 -8
- package/types/mysql/table-info.d.ts +36 -36
- package/types/task/daily.d.ts +16 -16
- package/types/task/fixed-delay.d.ts +9 -9
- package/types/task/fixed-rate.d.ts +9 -9
- package/types/task/index.d.ts +4 -4
- package/types/task/task.d.ts +34 -34
- package/types/validation/exception.d.ts +38 -38
- package/types/validation/index.d.ts +32 -32
- package/types/validation/validator/array.d.ts +5 -5
- package/types/validation/validator/enum.d.ts +8 -8
- package/types/validation/validator/index.d.ts +11 -11
- package/types/validation/validator/length.d.ts +10 -10
- package/types/validation/validator/max-length.d.ts +8 -8
- package/types/validation/validator/max.d.ts +7 -7
- package/types/validation/validator/min-length.d.ts +6 -6
- package/types/validation/validator/min.d.ts +7 -7
- package/types/validation/validator/not-blank.d.ts +7 -7
- package/types/validation/validator/not-null.d.ts +6 -6
- package/types/validation/validator/plain-obj.d.ts +7 -7
- package/types/validation/validator/regexp.d.ts +8 -8
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
# MongoDB
|
|
2
|
+
|
|
3
|
+
The MongoDB component is built on top of the [official MongoDB driver](https://www.npmjs.com/package/mongodb), providing simple entity mapping and CRUD operations for ease of use.
|
|
4
|
+
|
|
5
|
+
## Environment Variables
|
|
6
|
+
|
|
7
|
+
The MongoDB component supports multiple instances. By default, it uses MONGO as the prefix.
|
|
8
|
+
|
|
9
|
+
| Variable Name | Description |
|
|
10
|
+
| :-------------------------- | :-------------------------------------------------------------------------- |
|
|
11
|
+
| MONGO_URI | MongoDB connection string. Example: mongodb+srv://<user>:<password>@<cluster-url> |
|
|
12
|
+
| MONGO_MAX_POOL_SIZE | Maximum connection pool size, default 10 |
|
|
13
|
+
| MONGO_MIN_POOL_SIZE | Minimum connection pool size, default 1 |
|
|
14
|
+
| MONGO_MAX_CONNECTING | Maximum concurrent connections in pool, default 10 |
|
|
15
|
+
| MONGO_MAX_IDLE_TIME_MS | Maximum idle time for connections in milliseconds, default 60000 |
|
|
16
|
+
| MONGO_WAIT_QUEUE_TIMEOUT_MS | Maximum wait time for connections in milliseconds, default 60000 |
|
|
17
|
+
| MONGO_SLOW_QUERY_WARN | Slow query warning. When enabled, warning logs are output for slow queries. Default enabled |
|
|
18
|
+
| MONGO_SLOW_QUERY_MS | Slow query threshold in milliseconds, default 200 |
|
|
19
|
+
| MONGO_TRANSACTION_TIMEOUT | Transaction timeout in milliseconds, default 5000 |
|
|
20
|
+
| MONGO_TRANSACTION_STRICT | Transaction strict mode, default true. Set to false to disable |
|
|
21
|
+
|
|
22
|
+
## Usage
|
|
23
|
+
|
|
24
|
+
### Initialization
|
|
25
|
+
|
|
26
|
+
First use the enableMongoDB function to enable MongoDB, then use related features.
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
await enableMongoDB()
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
The component supports multiple instances. If multiple databases need to be connected, you can specify a new name.
|
|
33
|
+
|
|
34
|
+
```ts
|
|
35
|
+
// Enable implementation with name md2
|
|
36
|
+
await enableMongoDB('md2')
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
By default, environment variables use MONGO as the prefix. For named instances, the uppercase name is used as the prefix. In the example above, the instance named md2 uses the MD2 prefix.
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
# Configure default connection
|
|
43
|
+
MONGO_URI=mongodb://test1:t1abcd@localhost/t1
|
|
44
|
+
MONGO_MAXPOOLSIZE=10
|
|
45
|
+
# Configure connection for md2 instance
|
|
46
|
+
MD2_URI=mongodb://test2:t2abcd@localhost/t2
|
|
47
|
+
MD2_MAXPOOLSIZE=10
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Use the getMongoDBManager function to get a manager instance for operating MongoDB, with optional name parameter to get the corresponding instance.
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
// Default instance
|
|
54
|
+
const manager = getMongoDBManager()
|
|
55
|
+
// md2 instance
|
|
56
|
+
const md2 = getMongoDBManager('md2')
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Entity Mapping
|
|
60
|
+
|
|
61
|
+
Basic CRUD operations can be performed through the manager object's methods, but configuration is required before operation.
|
|
62
|
+
|
|
63
|
+
Configuration consists of two parts: collection data format definition and collection information settings. Here is an example:
|
|
64
|
+
|
|
65
|
+
```ts
|
|
66
|
+
/**
|
|
67
|
+
* User collection data definition.
|
|
68
|
+
* Primary key name is fixed as _id, mapping configuration not supported. Entity class should not have _id field.
|
|
69
|
+
*/
|
|
70
|
+
export interface User {
|
|
71
|
+
nickname: string
|
|
72
|
+
skills: string[]
|
|
73
|
+
// Create and update fields can be set to be automatically managed by the component
|
|
74
|
+
// Due to type constraints, set as optional for insertion and update without filling
|
|
75
|
+
createAt?: Date
|
|
76
|
+
updateAt?: Date
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* User collection information. Type is MongoCollection with generic type as entity type.
|
|
80
|
+
* Primary key name is fixed as _id, mapping configuration not supported.
|
|
81
|
+
*/
|
|
82
|
+
export const collUser: MongoCollection<User> = {
|
|
83
|
+
/**
|
|
84
|
+
* Collection name
|
|
85
|
+
*/
|
|
86
|
+
collectionName: 'user',
|
|
87
|
+
/**
|
|
88
|
+
* Configure creation time field, automatically managed by component
|
|
89
|
+
*/
|
|
90
|
+
createdDate: {
|
|
91
|
+
type: 'date',
|
|
92
|
+
field: 'createAt'
|
|
93
|
+
},
|
|
94
|
+
/**
|
|
95
|
+
* Configure update time field, automatically managed by component
|
|
96
|
+
*/
|
|
97
|
+
updatedDate: {
|
|
98
|
+
type: 'date',
|
|
99
|
+
field: 'updateAt'
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### CRUD Operations
|
|
105
|
+
|
|
106
|
+
Now you can perform CRUD operations. All manager operations take the collection information as the first parameter, which is the collUser configured earlier.
|
|
107
|
+
|
|
108
|
+
```ts
|
|
109
|
+
const manager = getMongoDBManager()
|
|
110
|
+
// Insert record. If _id has no value, database generates ObjectId as primary key
|
|
111
|
+
await manager.insert(collUser, { _id: '007', nickname: 'Spark', skills: [] })
|
|
112
|
+
// Find by id
|
|
113
|
+
const user1 = await manager.findById(collUser, '007')
|
|
114
|
+
// Update nickname
|
|
115
|
+
user1.nickname = 'ryan'
|
|
116
|
+
await manager.update(collUser, user1)
|
|
117
|
+
// Check if id exists
|
|
118
|
+
const exist = await manager.existsById(collUser, 'xyz')
|
|
119
|
+
// Check if record exists by condition
|
|
120
|
+
const exist2 = await manager.existsBy(collUser, { nickname: 'acute' })
|
|
121
|
+
// Delete by id
|
|
122
|
+
await manager.deleteById(collUser, '007')
|
|
123
|
+
// Delete by condition. Use with caution, deleting large amounts of data at once may cause high database load and online incidents
|
|
124
|
+
await manager.deleteMany(collUser, { nickname: 'smith' })
|
|
125
|
+
// Find first matching record
|
|
126
|
+
const jack = await manager.findFirst(collUser, { nickname: 'jack' })
|
|
127
|
+
// Find all records. Use with caution, querying large amounts of data at once may cause memory issues and take a long time to transfer
|
|
128
|
+
await manager.findAll(collUser)
|
|
129
|
+
// Count. Use with caution, count operation may have performance issues even with indexes for large data sets
|
|
130
|
+
const count = await manager.count(collUser, { nickname: 'Steve' })
|
|
131
|
+
// Find users with skills, return at most 2 results
|
|
132
|
+
const list = await manager.find(
|
|
133
|
+
collUser,
|
|
134
|
+
{
|
|
135
|
+
skills: { $exists: true }
|
|
136
|
+
},
|
|
137
|
+
{ offset: 0, limit: 2 }
|
|
138
|
+
)
|
|
139
|
+
// Pagination, sort by id, 20 items per page, query page 2
|
|
140
|
+
const page = await manager.paginate(
|
|
141
|
+
collUser,
|
|
142
|
+
{
|
|
143
|
+
skills: { $exists: true }
|
|
144
|
+
},
|
|
145
|
+
{ pn: 2, pz: 20, orderBy: ['_id', 'asc'] }
|
|
146
|
+
)
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Update Methods Description
|
|
150
|
+
|
|
151
|
+
The manager provides four update methods: update, partialUpdate, updateMany, updateOne.
|
|
152
|
+
|
|
153
|
+
| Method Name | Description |
|
|
154
|
+
| :------------- | :-------------------------------------------------------------------------- |
|
|
155
|
+
| update | Full document update, requires complete document information, returns updated document, throws exception on failure |
|
|
156
|
+
| partialUpdate | Partial update, only needs id and fields to update, returns whether update succeeded |
|
|
157
|
+
| updateMany | Update all matching records, returns number of updated documents |
|
|
158
|
+
| updateOne | Update only one matching record, only supports equality conditions, does not support range conditions |
|
|
159
|
+
|
|
160
|
+
```ts
|
|
161
|
+
// update requires complete document, usually need to query first
|
|
162
|
+
const user = await manager.findById(collUser, '007')
|
|
163
|
+
user.nickname = 'ryan'
|
|
164
|
+
await manager.update(collUser, user)
|
|
165
|
+
// partialUpdate does not require querying first
|
|
166
|
+
// Update nickname of document with id 001 to lily
|
|
167
|
+
await manager.partialUpdate(collUser, '001', { $set: { nickname: 'lily' } })
|
|
168
|
+
// updateMany differs from partialUpdate only in that id parameter becomes condition
|
|
169
|
+
// Increment credit by 1 for all users with credit <= 10
|
|
170
|
+
await manager.updateMany(collUser, { credit: { $lte: 10 } }, { $inc: { credit: 1 } })
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Version Management
|
|
174
|
+
|
|
175
|
+
The enableMongoDB function supports a migration parameter for version management and automatic migration.
|
|
176
|
+
|
|
177
|
+
```ts
|
|
178
|
+
await enableMongoDB({
|
|
179
|
+
migration: {
|
|
180
|
+
versionList: versionList
|
|
181
|
+
}
|
|
182
|
+
})
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
versionList is an array of MongoMigrationVersion (`(db: Db) => Promise<void>`) type elements. Db is the database provided by the MongoDB driver, which can perform various operations such as creating collections and indexes.
|
|
186
|
+
|
|
187
|
+
The version number is the index of the element, meaning each program update should add elements. Existing elements cannot be modified, and the program does not perform any validation. During startup, the program checks the already updated version number (index of version list), then finds subsequent versions from the version list, updates them one by one, and marks the completed version numbers.
|
|
188
|
+
|
|
189
|
+
Here is an example of the versionList parameter:
|
|
190
|
+
|
|
191
|
+
```ts
|
|
192
|
+
const versionList: MongoMigrationVersion[] = [
|
|
193
|
+
// Version 1
|
|
194
|
+
async db => {
|
|
195
|
+
// Create a collection, insert some data, then create indexes
|
|
196
|
+
await db.createCollection('user')
|
|
197
|
+
await db
|
|
198
|
+
.collection<User>('user')
|
|
199
|
+
.createIndex({ nickname: 1 }, { unique: true, name: 'uk_nickname' })
|
|
200
|
+
await db
|
|
201
|
+
.collection<User>('user')
|
|
202
|
+
.createIndex({ skills: 1 }, { unique: false, name: 'idx_skills' })
|
|
203
|
+
// Preset data
|
|
204
|
+
await db.collection<User>('user').insertOne({
|
|
205
|
+
nickname: 'jack',
|
|
206
|
+
skills: ['java'],
|
|
207
|
+
createAt: new Date(),
|
|
208
|
+
updateAt: new Date()
|
|
209
|
+
})
|
|
210
|
+
},
|
|
211
|
+
// Version 2
|
|
212
|
+
async db => {
|
|
213
|
+
// Delete an index
|
|
214
|
+
await db.collection<User>('user').dropIndex('idx_skills')
|
|
215
|
+
// Preset data
|
|
216
|
+
await db.collection<User>('user').insertOne({
|
|
217
|
+
nickname: 'tom',
|
|
218
|
+
skills: ['golang', 'rust'],
|
|
219
|
+
createAt: new Date(),
|
|
220
|
+
updateAt: new Date()
|
|
221
|
+
})
|
|
222
|
+
}
|
|
223
|
+
]
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## Transactions
|
|
227
|
+
|
|
228
|
+
Use the manager object's tx method to execute transaction operations. The method accepts a function parameter whose parameter is a session object. **All operations in the transaction must call session methods, which are the same as manager methods**.
|
|
229
|
+
|
|
230
|
+
```ts
|
|
231
|
+
await manager.tx(
|
|
232
|
+
async session => {
|
|
233
|
+
// Update order and account balance in transaction
|
|
234
|
+
// orderId Order ID
|
|
235
|
+
// accountId Account ID
|
|
236
|
+
// amount Order amount
|
|
237
|
+
await session.partialUpdate(collOrder, orderId, { $set: { status: 'finished' } })
|
|
238
|
+
await session.partialUpdate(collAccount, accountId, { $inc: { balance: -amount } })
|
|
239
|
+
},
|
|
240
|
+
// Additional options, can set timeout per transaction
|
|
241
|
+
{ timeout: 1000 }
|
|
242
|
+
)
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### Strict Mode
|
|
246
|
+
|
|
247
|
+
Transactions have strict mode enabled by default. Many operations are prohibited in strict mode. Set the environment variable MONGO_TRANSACTION_STRICT (default variable name, use corresponding name for multiple instances) to false to disable it.
|
|
248
|
+
|
|
249
|
+
In strict mode, the following operations are prohibited in transactions:
|
|
250
|
+
|
|
251
|
+
1. Bulk insert insertMany
|
|
252
|
+
2. Bulk update updateMany
|
|
253
|
+
3. Bulk delete deleteMany
|
|
254
|
+
4. Bulk query and count find, count, paginate
|
|
255
|
+
5. findByIdIn with more than 100 parameters
|
|
256
|
+
6. Any operation called via session exceeding 10 times
|