cgserver 12.0.8 → 12.2.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 (176) hide show
  1. package/README.md +9 -0
  2. package/dist/lib/Framework/AI/AiObject.js +10 -10
  3. package/dist/lib/Framework/AI/Astar.js +133 -133
  4. package/dist/lib/Framework/AI/BehaviorAI.js +340 -307
  5. package/dist/lib/Framework/AI/Entity.js +33 -33
  6. package/dist/lib/Framework/AI/Point.js +68 -68
  7. package/dist/lib/Framework/AI/TriggerMgr.js +201 -201
  8. package/dist/lib/Framework/Config/Config.js +74 -41
  9. package/dist/lib/Framework/Config/DbConfig.js +14 -14
  10. package/dist/lib/Framework/Config/FrameworkConfig.js +139 -173
  11. package/dist/lib/Framework/Config/IServerConfig.js +31 -31
  12. package/dist/lib/Framework/Config/_error_.js +35 -35
  13. package/dist/lib/Framework/Core/ByteTool.js +85 -85
  14. package/dist/lib/Framework/Core/Core.js +724 -688
  15. package/dist/lib/Framework/Core/Timer.js +116 -116
  16. package/dist/lib/Framework/Database/Decorator/AutoIncrement.js +10 -11
  17. package/dist/lib/Framework/Database/Decorator/DBCache.js +98 -65
  18. package/dist/lib/Framework/Database/Decorator/NotNull.js +10 -11
  19. package/dist/lib/Framework/Database/Decorator/PrimaryKey.js +10 -11
  20. package/dist/lib/Framework/Database/Decorator/Property.js +61 -61
  21. package/dist/lib/Framework/Database/Decorator/Table.js +14 -15
  22. package/dist/lib/Framework/Database/Decorator/Type.js +19 -20
  23. package/dist/lib/Framework/Database/MSSql/MSSqlManager.js +86 -53
  24. package/dist/lib/Framework/Database/Mongo/MongoBaseService.js +141 -141
  25. package/dist/lib/Framework/Database/Mongo/MongoManager.js +595 -547
  26. package/dist/lib/Framework/Database/Mongo/MongoServiceManager.js +52 -52
  27. package/dist/lib/Framework/Database/Mysql/MysqlBaseService.js +280 -280
  28. package/dist/lib/Framework/Database/Mysql/MysqlManager.js +138 -105
  29. package/dist/lib/Framework/Database/Redis/RedisManager.js +94 -61
  30. package/dist/lib/Framework/Decorator/AdminValidate.js +18 -19
  31. package/dist/lib/Framework/Decorator/AuthorityValidate.js +22 -22
  32. package/dist/lib/Framework/Decorator/CreatorValidate.js +18 -19
  33. package/dist/lib/Framework/Decorator/JsonAdminValidate.js +14 -15
  34. package/dist/lib/Framework/Decorator/JsonAuthorityValidate.js +20 -20
  35. package/dist/lib/Framework/Decorator/JsonCreatorValidate.js +18 -19
  36. package/dist/lib/Framework/Decorator/SyncCall.js +41 -42
  37. package/dist/lib/Framework/Decorator/SyncCallServer.js +77 -77
  38. package/dist/lib/Framework/Logic/CacheTool.js +106 -73
  39. package/dist/lib/Framework/Logic/EventTool.js +31 -28
  40. package/dist/lib/Framework/Logic/HttpTool.js +138 -105
  41. package/dist/lib/Framework/Logic/Log.js +121 -88
  42. package/dist/lib/Framework/Logic/SyncQueueTool.js +44 -44
  43. package/dist/lib/Framework/Server/ProtoFilter/GoogleProtoFilter.js +90 -57
  44. package/dist/lib/Framework/Server/ProtoFilter/IProtoFilter.js +9 -9
  45. package/dist/lib/Framework/Server/ProtoFilter/JsonProtoFilter.js +29 -29
  46. package/dist/lib/Framework/Server/ProtoFilter/ProtoFactory.js +35 -35
  47. package/dist/lib/Framework/Server/RpcWebSocketServer/CgMq.js +180 -180
  48. package/dist/lib/Framework/Server/RpcWebSocketServer/IRpc.js +38 -38
  49. package/dist/lib/Framework/Server/RpcWebSocketServer/IRpcClientWebSocket.js +253 -253
  50. package/dist/lib/Framework/Server/RpcWebSocketServer/IRpcServerWebSocket.js +94 -94
  51. package/dist/lib/Framework/Server/SocketServer/IClientSocket.js +44 -44
  52. package/dist/lib/Framework/Server/SocketServer/IServerSocket.js +114 -81
  53. package/dist/lib/Framework/Server/SocketServer/ISocket.js +255 -222
  54. package/dist/lib/Framework/Server/SocketServer/ISocketServer.js +177 -144
  55. package/dist/lib/Framework/Server/SocketServer/PacketParser.js +40 -40
  56. package/dist/lib/Framework/Server/WebServer/Controller/BaseController.js +119 -119
  57. package/dist/lib/Framework/Server/WebServer/Controller/MongoBaseUserController.js +171 -171
  58. package/dist/lib/Framework/Server/WebServer/Controller/MysqlBaseUserController.js +169 -169
  59. package/dist/lib/Framework/Server/WebServer/Engine/ControllerManager.js +115 -115
  60. package/dist/lib/Framework/Server/WebServer/Engine/Engine.js +254 -218
  61. package/dist/lib/Framework/Server/WebServer/Engine/RazorJs.js +543 -543
  62. package/dist/lib/Framework/Server/WebServer/Engine/Request.js +226 -226
  63. package/dist/lib/Framework/Server/WebServer/Engine/Response.js +120 -87
  64. package/dist/lib/Framework/Server/WebServer/IWebServer.js +55 -55
  65. package/dist/lib/Framework/Server/WebSocketServer/IClientWebSocket.js +44 -44
  66. package/dist/lib/Framework/Server/WebSocketServer/IServerWebSocket.js +128 -95
  67. package/dist/lib/Framework/Server/WebSocketServer/IWebSocket.js +248 -215
  68. package/dist/lib/Framework/Server/WebSocketServer/IWebSocketServer.js +250 -217
  69. package/dist/lib/Framework/Service/MongoAccountService.js +339 -339
  70. package/dist/lib/Framework/Service/MongoCacheService.js +50 -50
  71. package/dist/lib/Framework/Service/MongoUserService.js +129 -96
  72. package/dist/lib/Framework/Service/MysqlAccountService.js +411 -411
  73. package/dist/lib/Framework/Service/MysqlUserService.js +204 -171
  74. package/dist/lib/Framework/Service/ini.js +36 -36
  75. package/dist/lib/Framework/ThirdParty/AlipayTool.js +117 -205
  76. package/dist/lib/Framework/ThirdParty/Alisms.js +61 -50
  77. package/dist/lib/Framework/ThirdParty/AppleTool.js +271 -235
  78. package/dist/lib/Framework/ThirdParty/CgRankTool.js +215 -215
  79. package/dist/lib/Framework/ThirdParty/EmailTool.js +71 -38
  80. package/dist/lib/Framework/ThirdParty/QQTool.js +162 -129
  81. package/dist/lib/Framework/ThirdParty/QiniuTool.js +62 -29
  82. package/dist/lib/Framework/ThirdParty/Rpc.js +79 -79
  83. package/dist/lib/Framework/ThirdParty/WechatTool.js +167 -134
  84. package/dist/lib/Framework/cgserver.js +215 -212
  85. package/dist/lib/Framework/global.js +74 -74
  86. package/dist/lib/Framework/index.js +38 -5
  87. package/dist/lib/Framework/index_export_.js +180 -177
  88. package/dist/lib/test/test.js +21 -21
  89. package/dist/types/Framework/AI/AiObject.d.ts +5 -5
  90. package/dist/types/Framework/AI/Astar.d.ts +38 -38
  91. package/dist/types/Framework/AI/BehaviorAI.d.ts +24 -24
  92. package/dist/types/Framework/AI/Entity.d.ts +12 -12
  93. package/dist/types/Framework/AI/Point.d.ts +17 -17
  94. package/dist/types/Framework/AI/TriggerMgr.d.ts +51 -51
  95. package/dist/types/Framework/Config/Config.d.ts +9 -9
  96. package/dist/types/Framework/Config/DbConfig.d.ts +11 -11
  97. package/dist/types/Framework/Config/FrameworkConfig.d.ts +146 -178
  98. package/dist/types/Framework/Config/IServerConfig.d.ts +9 -9
  99. package/dist/types/Framework/Config/_error_.d.ts +99 -99
  100. package/dist/types/Framework/Core/ByteTool.d.ts +21 -21
  101. package/dist/types/Framework/Core/Core.d.ts +119 -120
  102. package/dist/types/Framework/Core/Timer.d.ts +16 -16
  103. package/dist/types/Framework/Database/Decorator/AutoIncrement.d.ts +1 -1
  104. package/dist/types/Framework/Database/Decorator/DBCache.d.ts +22 -22
  105. package/dist/types/Framework/Database/Decorator/NotNull.d.ts +1 -1
  106. package/dist/types/Framework/Database/Decorator/PrimaryKey.d.ts +1 -1
  107. package/dist/types/Framework/Database/Decorator/Property.d.ts +57 -57
  108. package/dist/types/Framework/Database/Decorator/Table.d.ts +1 -1
  109. package/dist/types/Framework/Database/Decorator/Type.d.ts +1 -1
  110. package/dist/types/Framework/Database/MSSql/MSSqlManager.d.ts +26 -26
  111. package/dist/types/Framework/Database/Mongo/MongoBaseService.d.ts +116 -116
  112. package/dist/types/Framework/Database/Mongo/MongoManager.d.ts +207 -204
  113. package/dist/types/Framework/Database/Mongo/MongoServiceManager.d.ts +13 -13
  114. package/dist/types/Framework/Database/Mysql/MysqlBaseService.d.ts +34 -34
  115. package/dist/types/Framework/Database/Mysql/MysqlManager.d.ts +30 -30
  116. package/dist/types/Framework/Database/Redis/RedisManager.d.ts +24 -24
  117. package/dist/types/Framework/Decorator/AdminValidate.d.ts +1 -1
  118. package/dist/types/Framework/Decorator/AuthorityValidate.d.ts +2 -2
  119. package/dist/types/Framework/Decorator/CreatorValidate.d.ts +1 -1
  120. package/dist/types/Framework/Decorator/JsonAdminValidate.d.ts +1 -1
  121. package/dist/types/Framework/Decorator/JsonAuthorityValidate.d.ts +2 -2
  122. package/dist/types/Framework/Decorator/JsonCreatorValidate.d.ts +1 -1
  123. package/dist/types/Framework/Decorator/SyncCall.d.ts +12 -12
  124. package/dist/types/Framework/Decorator/SyncCallServer.d.ts +14 -14
  125. package/dist/types/Framework/Logic/CacheTool.d.ts +27 -27
  126. package/dist/types/Framework/Logic/EventTool.d.ts +11 -12
  127. package/dist/types/Framework/Logic/HttpTool.d.ts +19 -19
  128. package/dist/types/Framework/Logic/Log.d.ts +18 -18
  129. package/dist/types/Framework/Logic/SyncQueueTool.d.ts +21 -21
  130. package/dist/types/Framework/Server/ProtoFilter/GoogleProtoFilter.d.ts +9 -9
  131. package/dist/types/Framework/Server/ProtoFilter/IProtoFilter.d.ts +10 -10
  132. package/dist/types/Framework/Server/ProtoFilter/JsonProtoFilter.d.ts +6 -6
  133. package/dist/types/Framework/Server/ProtoFilter/ProtoFactory.d.ts +12 -12
  134. package/dist/types/Framework/Server/RpcWebSocketServer/CgMq.d.ts +59 -59
  135. package/dist/types/Framework/Server/RpcWebSocketServer/IRpc.d.ts +33 -33
  136. package/dist/types/Framework/Server/RpcWebSocketServer/IRpcClientWebSocket.d.ts +34 -34
  137. package/dist/types/Framework/Server/RpcWebSocketServer/IRpcServerWebSocket.d.ts +23 -23
  138. package/dist/types/Framework/Server/SocketServer/IClientSocket.d.ts +16 -18
  139. package/dist/types/Framework/Server/SocketServer/IServerSocket.d.ts +27 -29
  140. package/dist/types/Framework/Server/SocketServer/ISocket.d.ts +78 -81
  141. package/dist/types/Framework/Server/SocketServer/ISocketServer.d.ts +44 -45
  142. package/dist/types/Framework/Server/SocketServer/PacketParser.d.ts +8 -10
  143. package/dist/types/Framework/Server/WebServer/Controller/BaseController.d.ts +34 -34
  144. package/dist/types/Framework/Server/WebServer/Controller/MongoBaseUserController.d.ts +28 -28
  145. package/dist/types/Framework/Server/WebServer/Controller/MysqlBaseUserController.d.ts +27 -27
  146. package/dist/types/Framework/Server/WebServer/Engine/ControllerManager.d.ts +37 -37
  147. package/dist/types/Framework/Server/WebServer/Engine/Engine.d.ts +42 -44
  148. package/dist/types/Framework/Server/WebServer/Engine/RazorJs.d.ts +21 -21
  149. package/dist/types/Framework/Server/WebServer/Engine/Request.d.ts +47 -50
  150. package/dist/types/Framework/Server/WebServer/Engine/Response.d.ts +26 -26
  151. package/dist/types/Framework/Server/WebServer/IWebServer.d.ts +22 -22
  152. package/dist/types/Framework/Server/WebSocketServer/IClientWebSocket.d.ts +17 -17
  153. package/dist/types/Framework/Server/WebSocketServer/IServerWebSocket.d.ts +37 -38
  154. package/dist/types/Framework/Server/WebSocketServer/IWebSocket.d.ts +76 -76
  155. package/dist/types/Framework/Server/WebSocketServer/IWebSocketServer.d.ts +49 -49
  156. package/dist/types/Framework/Service/MongoAccountService.d.ts +62 -62
  157. package/dist/types/Framework/Service/MongoCacheService.d.ts +19 -19
  158. package/dist/types/Framework/Service/MongoUserService.d.ts +31 -31
  159. package/dist/types/Framework/Service/MysqlAccountService.d.ts +67 -67
  160. package/dist/types/Framework/Service/MysqlUserService.d.ts +33 -33
  161. package/dist/types/Framework/Service/ini.d.ts +29 -29
  162. package/dist/types/Framework/ThirdParty/AlipayTool.d.ts +76 -108
  163. package/dist/types/Framework/ThirdParty/Alisms.d.ts +23 -13
  164. package/dist/types/Framework/ThirdParty/AppleTool.d.ts +131 -131
  165. package/dist/types/Framework/ThirdParty/CgRankTool.d.ts +107 -107
  166. package/dist/types/Framework/ThirdParty/EmailTool.d.ts +4 -4
  167. package/dist/types/Framework/ThirdParty/QQTool.d.ts +41 -41
  168. package/dist/types/Framework/ThirdParty/QiniuTool.d.ts +5 -5
  169. package/dist/types/Framework/ThirdParty/Rpc.d.ts +28 -28
  170. package/dist/types/Framework/ThirdParty/WechatTool.d.ts +30 -30
  171. package/dist/types/Framework/cgserver.d.ts +63 -63
  172. package/dist/types/Framework/global.d.ts +45 -45
  173. package/dist/types/Framework/index.d.ts +2 -2
  174. package/dist/types/Framework/index_export_.d.ts +81 -79
  175. package/dist/types/test/test.d.ts +1 -1
  176. package/package.json +8 -4
@@ -1,547 +1,595 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.gMongoMgr = exports.MongoExt = exports.MongoManager = exports.MgReturn = exports.MrResult = exports.MongoBaseModel = exports.MongoConfig = void 0;
4
- const mongo = require("mongodb");
5
- const _error_1 = require("../../Config/_error_");
6
- const Core_1 = require("../../Core/Core");
7
- const Log_1 = require("../../Logic/Log");
8
- class MongoConfig {
9
- open = false;
10
- host = "127.0.0.1";
11
- port = 27017;
12
- options = null;
13
- database = 'mongodb';
14
- }
15
- exports.MongoConfig = MongoConfig;
16
- class MongoBaseModel {
17
- _id;
18
- }
19
- exports.MongoBaseModel = MongoBaseModel;
20
- class MrResult {
21
- /**
22
- * select 的数据量
23
- */
24
- length = 0;
25
- /**
26
- * 插入数据的自增id
27
- */
28
- insertId = null;
29
- insertIds = null;
30
- /**
31
- * update 更新数据的影响条数
32
- */
33
- changedRows = null;
34
- /**
35
- * 插入或删除数据的影响条数
36
- */
37
- affectedRows = null;
38
- }
39
- exports.MrResult = MrResult;
40
- class MgReturn {
41
- error = null;
42
- result = new MrResult();
43
- list = [];
44
- }
45
- exports.MgReturn = MgReturn;
46
- class MongoManager {
47
- _dbs = {};
48
- _defdbname = "";
49
- get defdbname() {
50
- return this._defdbname;
51
- }
52
- //初始化多个数据库,第一个open数据库为默认数据库
53
- async init(cfgs) {
54
- for (let i = 0; i < cfgs.length; ++i) {
55
- let cfg = cfgs[i];
56
- let ret = await this.addMongo(cfg);
57
- if (!ret) {
58
- return false;
59
- }
60
- }
61
- return true;
62
- }
63
- async addMongo(cfg) {
64
- if (this._dbs[cfg.database]) {
65
- Log_1.gLog.error("数据库配置得database不能相同!database=" + cfg.database);
66
- return false;
67
- }
68
- let mongoext = new MongoExt();
69
- let ret = await mongoext.init(cfg);
70
- if (!ret) {
71
- Log_1.gLog.error("数据库初始化失败!cfg=" + JSON.stringify(cfg));
72
- return false;
73
- }
74
- this._dbs[cfg.database] = mongoext;
75
- if (!this._defdbname) {
76
- this._defdbname = cfg.database;
77
- }
78
- return true;
79
- }
80
- async removeMongo(dbname, force = false) {
81
- let mongo = this.getMongo(dbname);
82
- if (!mongo) {
83
- return false;
84
- }
85
- mongo.close(force);
86
- }
87
- getMongo(dbname = "") {
88
- if (!dbname) {
89
- dbname = this._defdbname;
90
- }
91
- return this._dbs[dbname];
92
- }
93
- }
94
- exports.MongoManager = MongoManager;
95
- class MongoExt {
96
- _mongocfg = null;
97
- _init_cbs = [];
98
- _mongoDb = null;
99
- get mongoDb() {
100
- return this._mongoDb;
101
- }
102
- _mongoClient = null;
103
- get mongoClient() {
104
- return this._mongoClient;
105
- }
106
- _mongo_init_succ = false;
107
- _inited = false;
108
- get isValid() {
109
- return this._inited;
110
- }
111
- constructor() {
112
- }
113
- async init(cfg) {
114
- if (!cfg || !cfg.open) {
115
- return false;
116
- }
117
- if (this._inited) {
118
- return false;
119
- }
120
- if (this._mongoDb) {
121
- return true;
122
- }
123
- this._mongocfg = cfg;
124
- this._inited = true;
125
- Log_1.gLog.info("mongo config=" + JSON.stringify(this._mongocfg));
126
- this._mongoClient = new mongo.MongoClient("mongodb://" + this._mongocfg.host + ":" + this._mongocfg.port, this._mongocfg.options);
127
- await Core_1.core.safeCall(this._mongoClient.connect, this._mongoClient);
128
- this.onConnect();
129
- this._mongoDb = this._mongoClient.db(this._mongocfg.database);
130
- for (let i = 0; i < this._init_cbs.length; ++i) {
131
- this._init_cbs[i]();
132
- }
133
- return true;
134
- }
135
- close(force = false) {
136
- this._mongoClient.close(force);
137
- }
138
- registerInitCb(cb) {
139
- this._init_cbs.push(cb);
140
- }
141
- onConnect() {
142
- this._mongo_init_succ = true;
143
- Log_1.gLog.info("mongo has connected!");
144
- }
145
- /**
146
- * 获取自增长id
147
- * @param key
148
- * @returns 小于等于0为异常
149
- */
150
- async getAutoIds(key) {
151
- if (!this._mongoDb) {
152
- return -1;
153
- }
154
- let collection = "auto_ids";
155
- let col = this._mongoDb.collection(collection);
156
- try {
157
- let where = this._convertWhere({ _id: key });
158
- let rs = await Core_1.core.safeCall(col.findOneAndUpdate, col, where, { $inc: { id: 1 } }, { upsert: true });
159
- if (rs && rs.id) {
160
- return rs.id + 1;
161
- }
162
- return 1;
163
- }
164
- catch (e) {
165
- Log_1.gLog.error(e.stack);
166
- }
167
- return -2;
168
- }
169
- _convertWhere(where) {
170
- if (!where || !where._id) {
171
- return;
172
- }
173
- if (Core_1.core.isString(where._id) && where._id.length == 24) {
174
- let _id = where._id;
175
- try {
176
- where._id = this.toObjectId(_id);
177
- }
178
- catch (e) {
179
- where._id = _id;
180
- }
181
- }
182
- return where;
183
- }
184
- toObjectId(id) {
185
- return new mongo.ObjectId(id);
186
- }
187
- /**
188
- * 获取单条消息
189
- * @param collection
190
- */
191
- async findOne(collection, where = {}, property = {}) {
192
- if (!where) {
193
- where = {};
194
- }
195
- this._convertWhere(where);
196
- let rs = { errcode: null, one: null };
197
- if (!this._mongoDb) {
198
- rs.errcode = _error_1.EErrorCode.No_Mongo;
199
- return rs;
200
- }
201
- let one = null;
202
- try {
203
- let col = this._mongoDb.collection(collection);
204
- one = await col.findOne(where, { projection: property });
205
- }
206
- catch (e) {
207
- Log_1.gLog.error({ collection, property, where });
208
- Log_1.gLog.error(e.stack);
209
- rs.errcode = _error_1.EErrorCode.Mongo_Error;
210
- }
211
- rs.one = one;
212
- return rs;
213
- }
214
- async distinct(collection, key, where = {}) {
215
- if (!where) {
216
- where = {};
217
- }
218
- this._convertWhere(where);
219
- let rs = { errcode: null, lst: null };
220
- if (!this._mongoDb) {
221
- rs.errcode = _error_1.EErrorCode.No_Mongo;
222
- return rs;
223
- }
224
- let lst = null;
225
- try {
226
- let col = this._mongoDb.collection(collection);
227
- lst = await col.distinct(key, where);
228
- }
229
- catch (e) {
230
- Log_1.gLog.error({ collection, key, where });
231
- Log_1.gLog.error(e.stack);
232
- rs.errcode = _error_1.EErrorCode.Mongo_Error;
233
- }
234
- rs.lst = lst;
235
- return rs;
236
- }
237
- async findMany(collection, where = {}, property = {}, sort, skip = 0, limit = 0) {
238
- if (!where) {
239
- where = {};
240
- }
241
- this._convertWhere(where);
242
- let rs = { errcode: null, list: null };
243
- if (!this._mongoDb) {
244
- rs.errcode = _error_1.EErrorCode.No_Mongo;
245
- return rs;
246
- }
247
- let list = [];
248
- try {
249
- let col = this._mongoDb.collection(collection);
250
- let cursor = col.find(where, { projection: property });
251
- if (sort) {
252
- cursor = cursor.sort(sort);
253
- }
254
- if (skip) {
255
- cursor = cursor.skip(skip);
256
- }
257
- if (limit) {
258
- cursor = cursor.limit(limit);
259
- }
260
- list = await cursor.toArray();
261
- }
262
- catch (e) {
263
- Log_1.gLog.error({ collection, property, where, sort, skip, limit });
264
- Log_1.gLog.error(e.stack);
265
- rs.errcode = _error_1.EErrorCode.Mongo_Error;
266
- }
267
- rs.list = list;
268
- return rs;
269
- }
270
- async countDocuments(collection, where, options) {
271
- this._convertWhere(where);
272
- let rs = { errcode: null, count: -1 };
273
- if (!this._mongoDb) {
274
- rs.errcode = _error_1.EErrorCode.No_Mongo;
275
- return rs;
276
- }
277
- let count = -1;
278
- try {
279
- let col = this._mongoDb.collection(collection);
280
- count = await col.countDocuments(where || {}, options);
281
- }
282
- catch (e) {
283
- Log_1.gLog.error({ collection, where });
284
- Log_1.gLog.error(e.stack);
285
- rs.errcode = _error_1.EErrorCode.Mongo_Error;
286
- }
287
- rs.count = count;
288
- return rs;
289
- }
290
- async deleteOne(collection, where) {
291
- this._convertWhere(where);
292
- let rs = { errcode: null, count: -1 };
293
- if (!this._mongoDb) {
294
- rs.errcode = _error_1.EErrorCode.No_Mongo;
295
- return rs;
296
- }
297
- let del_rs = null;
298
- try {
299
- let col = this._mongoDb.collection(collection);
300
- del_rs = await col.deleteOne(where || {});
301
- }
302
- catch (e) {
303
- Log_1.gLog.error({ collection, where });
304
- Log_1.gLog.error(e.stack);
305
- rs.errcode = _error_1.EErrorCode.Mongo_Error;
306
- }
307
- if (del_rs) {
308
- rs.count = del_rs.deletedCount;
309
- }
310
- return rs;
311
- }
312
- async deleteMany(collection, where) {
313
- this._convertWhere(where);
314
- let rs = { errcode: null, count: -1 };
315
- if (!this._mongoDb) {
316
- rs.errcode = _error_1.EErrorCode.No_Mongo;
317
- return rs;
318
- }
319
- let del_rs = null;
320
- try {
321
- let col = this._mongoDb.collection(collection);
322
- del_rs = await col.deleteMany(where || {});
323
- }
324
- catch (e) {
325
- Log_1.gLog.error({ collection, where });
326
- Log_1.gLog.error(e.stack);
327
- rs.errcode = _error_1.EErrorCode.Mongo_Error;
328
- }
329
- if (del_rs) {
330
- rs.count = del_rs.deletedCount;
331
- }
332
- return rs;
333
- }
334
- /**
335
- * 插入数据
336
- * @param collection
337
- * @param data
338
- */
339
- async insertOne(collection, data) {
340
- let rs = { errcode: null, rs: null };
341
- if (!this._mongoDb) {
342
- rs.errcode = _error_1.EErrorCode.No_Mongo;
343
- return rs;
344
- }
345
- let in_rs = null;
346
- try {
347
- let col = this._mongoDb.collection(collection);
348
- in_rs = await col.insertOne(data);
349
- }
350
- catch (e) {
351
- Log_1.gLog.error({ collection, data });
352
- Log_1.gLog.error(e.stack);
353
- rs.errcode = _error_1.EErrorCode.Mongo_Error;
354
- }
355
- rs.rs = in_rs;
356
- return rs;
357
- }
358
- async insertManay(collection, data) {
359
- let rs = { errcode: null, rs: null };
360
- if (!this._mongoDb) {
361
- rs.errcode = _error_1.EErrorCode.No_Mongo;
362
- return rs;
363
- }
364
- let in_rs = null;
365
- try {
366
- let col = this._mongoDb.collection(collection);
367
- in_rs = await col.insertMany(data);
368
- }
369
- catch (e) {
370
- Log_1.gLog.error({ collection, data });
371
- Log_1.gLog.error(e.stack);
372
- rs.errcode = _error_1.EErrorCode.Mongo_Error;
373
- }
374
- rs.rs = in_rs;
375
- return rs;
376
- }
377
- async updateOne(collection, where, model, options) {
378
- let _id = model["_id"];
379
- delete model["_id"];
380
- if (!where && _id) {
381
- where["_id"] = _id;
382
- }
383
- this._convertWhere(where);
384
- let rs = { errcode: null, rs: null };
385
- if (!this._mongoDb) {
386
- if (_id) {
387
- model["_id"] = _id;
388
- }
389
- rs.errcode = _error_1.EErrorCode.No_Mongo;
390
- return rs;
391
- }
392
- let up_rs = null;
393
- try {
394
- let updatemodel = null;
395
- let money = false;
396
- for (let key in model) {
397
- if (key.startsWith("$")) {
398
- money = true;
399
- }
400
- }
401
- if (!money) {
402
- updatemodel = { "$set": model };
403
- }
404
- else {
405
- updatemodel = model;
406
- }
407
- let col = this._mongoDb.collection(collection);
408
- up_rs = await col.updateOne(where, updatemodel, options);
409
- }
410
- catch (e) {
411
- Log_1.gLog.error({ collection, model, where, options });
412
- Log_1.gLog.error(e.stack);
413
- rs.errcode = _error_1.EErrorCode.Mongo_Error;
414
- }
415
- rs.rs = up_rs;
416
- if (up_rs?.upsertedId || _id) {
417
- model["_id"] = up_rs?.upsertedId || _id;
418
- }
419
- return rs;
420
- }
421
- async updateMany(collection, where, model, options) {
422
- this._convertWhere(where);
423
- let rs = { errcode: null, rs: null };
424
- if (!this._mongoDb) {
425
- rs.errcode = _error_1.EErrorCode.No_Mongo;
426
- return rs;
427
- }
428
- let up_rs = null;
429
- try {
430
- let updateModel = null;
431
- let firstKey = Object.keys(model)[0];
432
- if (!firstKey.startsWith("$")) {
433
- updateModel = { $set: model };
434
- }
435
- else {
436
- updateModel = model;
437
- }
438
- let col = this._mongoDb.collection(collection);
439
- up_rs = await col.updateMany(where, updateModel, options);
440
- }
441
- catch (e) {
442
- Log_1.gLog.error({ collection, model, where, options });
443
- Log_1.gLog.error(e.stack);
444
- rs.errcode = _error_1.EErrorCode.Mongo_Error;
445
- }
446
- rs.rs = up_rs;
447
- return rs;
448
- }
449
- async createIndex(collection, index, options) {
450
- let rs = { errcode: null, rs: null };
451
- if (!this._mongoDb) {
452
- rs.errcode = _error_1.EErrorCode.No_Mongo;
453
- return rs;
454
- }
455
- let i_rs = null;
456
- try {
457
- let col = this._mongoDb.collection(collection);
458
- i_rs = await col.createIndex(index, options);
459
- }
460
- catch (e) {
461
- Log_1.gLog.error({ collection, index });
462
- Log_1.gLog.error(e.stack);
463
- rs.errcode = _error_1.EErrorCode.Mongo_Error;
464
- }
465
- rs.rs = i_rs;
466
- return rs;
467
- }
468
- async simpleAggregate(collection, where, property, size, random_size) {
469
- this._convertWhere(where);
470
- let rs = { errcode: null, list: null };
471
- if (!this._mongoDb) {
472
- rs.errcode = _error_1.EErrorCode.No_Mongo;
473
- return rs;
474
- }
475
- let list = [];
476
- try {
477
- let col = this._mongoDb.collection(collection);
478
- let params = [];
479
- if (where) {
480
- params.push({ '$match': where });
481
- }
482
- if (property) {
483
- params.push({ '$project': property });
484
- }
485
- if (random_size) {
486
- params.push({ '$sample': { 'size': random_size } });
487
- }
488
- let agg = col.aggregate(params);
489
- if (size) {
490
- list = await agg.limit(size).toArray();
491
- }
492
- else {
493
- list = await agg.toArray();
494
- }
495
- }
496
- catch (e) {
497
- Log_1.gLog.error(e.stack);
498
- rs.errcode = _error_1.EErrorCode.Mongo_Error;
499
- }
500
- rs.list = list;
501
- return rs;
502
- }
503
- aggregate(collection, pipeline, options) {
504
- if (!this._mongoDb) {
505
- return;
506
- }
507
- let col = this._mongoDb.collection(collection);
508
- let agg = col.aggregate(pipeline, options);
509
- return agg;
510
- }
511
- /**
512
- * 快速事务
513
- * @param collection
514
- * @param cb
515
- */
516
- async quickTransaction(cb, options) {
517
- if (!this._mongoDb) {
518
- return false;
519
- }
520
- let session = this._mongoClient.startSession();
521
- session.startTransaction(options);
522
- try {
523
- let rs = await cb(session);
524
- await session.commitTransaction();
525
- session.endSession();
526
- return rs;
527
- }
528
- catch (e) {
529
- await session.abortTransaction();
530
- Log_1.gLog.error(e.stack);
531
- }
532
- finally {
533
- await session.endSession();
534
- }
535
- return false;
536
- }
537
- async bulkWrite(collection, operations, options) {
538
- if (!this._mongoDb) {
539
- return;
540
- }
541
- let bulk = this._mongoDb.collection(collection);
542
- let bwr = bulk.bulkWrite(operations, options);
543
- return bwr;
544
- }
545
- }
546
- exports.MongoExt = MongoExt;
547
- exports.gMongoMgr = new MongoManager();
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.gMongoMgr = exports.MongoExt = exports.MongoManager = exports.MgReturn = exports.MrResult = exports.MongoBaseModel = exports.MongoConfig = void 0;
37
+ const mongo = __importStar(require("mongodb"));
38
+ const _error_1 = require("../../Config/_error_");
39
+ const Core_1 = require("../../Core/Core");
40
+ const Log_1 = require("../../Logic/Log");
41
+ class MongoConfig {
42
+ open = false;
43
+ host = "127.0.0.1";
44
+ port = 27017;
45
+ options = null;
46
+ database = 'mongodb';
47
+ }
48
+ exports.MongoConfig = MongoConfig;
49
+ class MongoBaseModel {
50
+ _id;
51
+ }
52
+ exports.MongoBaseModel = MongoBaseModel;
53
+ class MrResult {
54
+ /**
55
+ * select 的数据量
56
+ */
57
+ length = 0;
58
+ /**
59
+ * 插入数据的自增id
60
+ */
61
+ insertId = null;
62
+ insertIds = null;
63
+ /**
64
+ * update 更新数据的影响条数
65
+ */
66
+ changedRows = null;
67
+ /**
68
+ * 插入或删除数据的影响条数
69
+ */
70
+ affectedRows = null;
71
+ }
72
+ exports.MrResult = MrResult;
73
+ class MgReturn {
74
+ error = null;
75
+ result = new MrResult();
76
+ list = [];
77
+ }
78
+ exports.MgReturn = MgReturn;
79
+ class MongoManager {
80
+ _dbs = {};
81
+ _defdbname = "";
82
+ get defdbname() {
83
+ return this._defdbname;
84
+ }
85
+ //初始化多个数据库,第一个open数据库为默认数据库
86
+ async init(cfgs) {
87
+ for (let i = 0; i < cfgs.length; ++i) {
88
+ let cfg = cfgs[i];
89
+ let ret = await this.addMongo(cfg);
90
+ if (!ret) {
91
+ return false;
92
+ }
93
+ }
94
+ return true;
95
+ }
96
+ async addMongo(cfg) {
97
+ if (this._dbs[cfg.database]) {
98
+ Log_1.gLog.error("数据库配置得database不能相同!database=" + cfg.database);
99
+ return false;
100
+ }
101
+ let mongoext = new MongoExt();
102
+ let ret = await mongoext.init(cfg);
103
+ if (!ret) {
104
+ Log_1.gLog.error("数据库初始化失败!cfg=" + JSON.stringify(cfg));
105
+ return false;
106
+ }
107
+ this._dbs[cfg.database] = mongoext;
108
+ if (!this._defdbname) {
109
+ this._defdbname = cfg.database;
110
+ }
111
+ return true;
112
+ }
113
+ async removeMongo(dbname, force = false) {
114
+ let mongo = this.getMongo(dbname);
115
+ if (!mongo) {
116
+ return false;
117
+ }
118
+ mongo.close(force);
119
+ }
120
+ getMongo(dbname = "") {
121
+ if (!dbname) {
122
+ dbname = this._defdbname;
123
+ }
124
+ return this._dbs[dbname];
125
+ }
126
+ }
127
+ exports.MongoManager = MongoManager;
128
+ class MongoExt {
129
+ _mongocfg = null;
130
+ _init_cbs = [];
131
+ _mongoDb = null;
132
+ get mongoDb() {
133
+ return this._mongoDb;
134
+ }
135
+ _mongoClient = null;
136
+ get mongoClient() {
137
+ return this._mongoClient;
138
+ }
139
+ _mongo_init_succ = false;
140
+ _inited = false;
141
+ get isValid() {
142
+ return this._inited;
143
+ }
144
+ constructor() {
145
+ }
146
+ async init(cfg) {
147
+ if (!cfg || !cfg.open) {
148
+ return false;
149
+ }
150
+ if (this._inited) {
151
+ return false;
152
+ }
153
+ if (this._mongoDb) {
154
+ return true;
155
+ }
156
+ this._mongocfg = cfg;
157
+ this._inited = true;
158
+ Log_1.gLog.info("mongo config=" + JSON.stringify(this._mongocfg));
159
+ this._mongoClient = new mongo.MongoClient("mongodb://" + this._mongocfg.host + ":" + this._mongocfg.port, this._mongocfg.options);
160
+ this._mongoClient.on("connectionCreated", this.onConnectionCreated.bind(this));
161
+ this._mongoClient.on("connectionReady", this.onConnectionReady.bind(this));
162
+ this._mongoClient.on("connectionClosed", this.onConnectionClosed.bind(this));
163
+ this._mongoClient.connect();
164
+ return true;
165
+ }
166
+ onConnectionCreated(event) {
167
+ Log_1.gLog.info({ key: "mongo onConnectionCreated", event });
168
+ }
169
+ onConnectionReady(event) {
170
+ Log_1.gLog.info({ key: "mongo onConnectionReady", event });
171
+ this.onConnect();
172
+ this._mongoDb = this._mongoClient.db(this._mongocfg.database);
173
+ for (let i = 0; i < this._init_cbs.length; ++i) {
174
+ this._init_cbs[i]();
175
+ }
176
+ this._init_cbs = [];
177
+ }
178
+ onConnectionClosed(event) {
179
+ Log_1.gLog.info({ key: "mongo onConnectionClosed", event });
180
+ this._inited = false;
181
+ this.init(this._mongocfg);
182
+ }
183
+ close(force = false) {
184
+ this._mongoClient.close(force);
185
+ }
186
+ registerInitCb(cb) {
187
+ this._init_cbs.push(cb);
188
+ }
189
+ onConnect() {
190
+ this._mongo_init_succ = true;
191
+ Log_1.gLog.info("mongo has connected!");
192
+ }
193
+ /**
194
+ * 获取自增长id
195
+ * @param key
196
+ * @returns 小于等于0为异常
197
+ */
198
+ async getAutoIds(key) {
199
+ if (!this._mongoDb) {
200
+ return -1;
201
+ }
202
+ let collection = "auto_ids";
203
+ let col = this._mongoDb.collection(collection);
204
+ try {
205
+ let where = this._convertWhere({ _id: key });
206
+ let rs = await Core_1.core.safeCall(col.findOneAndUpdate, col, where, { $inc: { id: 1 } }, { upsert: true });
207
+ if (rs && rs.id) {
208
+ return rs.id + 1;
209
+ }
210
+ return 1;
211
+ }
212
+ catch (e) {
213
+ Log_1.gLog.error(e.stack);
214
+ }
215
+ return -2;
216
+ }
217
+ _convertWhere(where) {
218
+ if (!where || !where._id) {
219
+ return;
220
+ }
221
+ if (Core_1.core.isString(where._id) && where._id.length == 24) {
222
+ let _id = where._id;
223
+ try {
224
+ where._id = this.toObjectId(_id);
225
+ }
226
+ catch (e) {
227
+ where._id = _id;
228
+ }
229
+ }
230
+ return where;
231
+ }
232
+ toObjectId(id) {
233
+ return new mongo.BSON.ObjectId(id);
234
+ }
235
+ /**
236
+ * 获取单条消息
237
+ * @param collection
238
+ */
239
+ async findOne(collection, where = {}, property = {}) {
240
+ if (!where) {
241
+ where = {};
242
+ }
243
+ this._convertWhere(where);
244
+ let rs = { errcode: null, one: null };
245
+ if (!this._mongoDb) {
246
+ rs.errcode = _error_1.EErrorCode.No_Mongo;
247
+ return rs;
248
+ }
249
+ let one = null;
250
+ try {
251
+ let col = this._mongoDb.collection(collection);
252
+ one = await col.findOne(where, { projection: property });
253
+ }
254
+ catch (e) {
255
+ Log_1.gLog.error({ collection, property, where });
256
+ Log_1.gLog.error(e.stack);
257
+ rs.errcode = _error_1.EErrorCode.Mongo_Error;
258
+ }
259
+ rs.one = one;
260
+ return rs;
261
+ }
262
+ async distinct(collection, key, where = {}) {
263
+ if (!where) {
264
+ where = {};
265
+ }
266
+ this._convertWhere(where);
267
+ let rs = { errcode: null, lst: null };
268
+ if (!this._mongoDb) {
269
+ rs.errcode = _error_1.EErrorCode.No_Mongo;
270
+ return rs;
271
+ }
272
+ let lst = null;
273
+ try {
274
+ let col = this._mongoDb.collection(collection);
275
+ lst = await col.distinct(key, where);
276
+ }
277
+ catch (e) {
278
+ Log_1.gLog.error({ collection, key, where });
279
+ Log_1.gLog.error(e.stack);
280
+ rs.errcode = _error_1.EErrorCode.Mongo_Error;
281
+ }
282
+ rs.lst = lst;
283
+ return rs;
284
+ }
285
+ async findMany(collection, where = {}, property = {}, sort, skip = 0, limit = 0) {
286
+ if (!where) {
287
+ where = {};
288
+ }
289
+ this._convertWhere(where);
290
+ let rs = { errcode: null, list: null };
291
+ if (!this._mongoDb) {
292
+ rs.errcode = _error_1.EErrorCode.No_Mongo;
293
+ return rs;
294
+ }
295
+ let list = [];
296
+ try {
297
+ let col = this._mongoDb.collection(collection);
298
+ let cursor = col.find(where, { projection: property });
299
+ if (sort) {
300
+ cursor = cursor.sort(sort);
301
+ }
302
+ if (skip) {
303
+ cursor = cursor.skip(skip);
304
+ }
305
+ if (limit) {
306
+ cursor = cursor.limit(limit);
307
+ }
308
+ list = await cursor.toArray();
309
+ }
310
+ catch (e) {
311
+ Log_1.gLog.error({ collection, property, where, sort, skip, limit });
312
+ Log_1.gLog.error(e.stack);
313
+ rs.errcode = _error_1.EErrorCode.Mongo_Error;
314
+ }
315
+ rs.list = list;
316
+ return rs;
317
+ }
318
+ async countDocuments(collection, where, options) {
319
+ this._convertWhere(where);
320
+ let rs = { errcode: null, count: -1 };
321
+ if (!this._mongoDb) {
322
+ rs.errcode = _error_1.EErrorCode.No_Mongo;
323
+ return rs;
324
+ }
325
+ let count = -1;
326
+ try {
327
+ let col = this._mongoDb.collection(collection);
328
+ count = await col.countDocuments(where || {}, options);
329
+ }
330
+ catch (e) {
331
+ Log_1.gLog.error({ collection, where });
332
+ Log_1.gLog.error(e.stack);
333
+ rs.errcode = _error_1.EErrorCode.Mongo_Error;
334
+ }
335
+ rs.count = count;
336
+ return rs;
337
+ }
338
+ async deleteOne(collection, where) {
339
+ this._convertWhere(where);
340
+ let rs = { errcode: null, count: -1 };
341
+ if (!this._mongoDb) {
342
+ rs.errcode = _error_1.EErrorCode.No_Mongo;
343
+ return rs;
344
+ }
345
+ let del_rs = null;
346
+ try {
347
+ let col = this._mongoDb.collection(collection);
348
+ del_rs = await col.deleteOne(where || {});
349
+ }
350
+ catch (e) {
351
+ Log_1.gLog.error({ collection, where });
352
+ Log_1.gLog.error(e.stack);
353
+ rs.errcode = _error_1.EErrorCode.Mongo_Error;
354
+ }
355
+ if (del_rs) {
356
+ rs.count = del_rs.deletedCount;
357
+ }
358
+ return rs;
359
+ }
360
+ async deleteMany(collection, where) {
361
+ this._convertWhere(where);
362
+ let rs = { errcode: null, count: -1 };
363
+ if (!this._mongoDb) {
364
+ rs.errcode = _error_1.EErrorCode.No_Mongo;
365
+ return rs;
366
+ }
367
+ let del_rs = null;
368
+ try {
369
+ let col = this._mongoDb.collection(collection);
370
+ del_rs = await col.deleteMany(where || {});
371
+ }
372
+ catch (e) {
373
+ Log_1.gLog.error({ collection, where });
374
+ Log_1.gLog.error(e.stack);
375
+ rs.errcode = _error_1.EErrorCode.Mongo_Error;
376
+ }
377
+ if (del_rs) {
378
+ rs.count = del_rs.deletedCount;
379
+ }
380
+ return rs;
381
+ }
382
+ /**
383
+ * 插入数据
384
+ * @param collection
385
+ * @param data
386
+ */
387
+ async insertOne(collection, data) {
388
+ let rs = { errcode: null, rs: null };
389
+ if (!this._mongoDb) {
390
+ rs.errcode = _error_1.EErrorCode.No_Mongo;
391
+ return rs;
392
+ }
393
+ let in_rs = null;
394
+ try {
395
+ let col = this._mongoDb.collection(collection);
396
+ in_rs = await col.insertOne(data);
397
+ }
398
+ catch (e) {
399
+ Log_1.gLog.error({ collection, data });
400
+ Log_1.gLog.error(e.stack);
401
+ rs.errcode = _error_1.EErrorCode.Mongo_Error;
402
+ }
403
+ rs.rs = in_rs;
404
+ return rs;
405
+ }
406
+ async insertManay(collection, data) {
407
+ let rs = { errcode: null, rs: null };
408
+ if (!this._mongoDb) {
409
+ rs.errcode = _error_1.EErrorCode.No_Mongo;
410
+ return rs;
411
+ }
412
+ let in_rs = null;
413
+ try {
414
+ let col = this._mongoDb.collection(collection);
415
+ in_rs = await col.insertMany(data);
416
+ }
417
+ catch (e) {
418
+ Log_1.gLog.error({ collection, data });
419
+ Log_1.gLog.error(e.stack);
420
+ rs.errcode = _error_1.EErrorCode.Mongo_Error;
421
+ }
422
+ rs.rs = in_rs;
423
+ return rs;
424
+ }
425
+ async updateOne(collection, where, model, options) {
426
+ let _id = model["_id"];
427
+ delete model["_id"];
428
+ if (!where && _id) {
429
+ where["_id"] = _id;
430
+ }
431
+ this._convertWhere(where);
432
+ let rs = { errcode: null, rs: null };
433
+ if (!this._mongoDb) {
434
+ if (_id) {
435
+ model["_id"] = _id;
436
+ }
437
+ rs.errcode = _error_1.EErrorCode.No_Mongo;
438
+ return rs;
439
+ }
440
+ let up_rs = null;
441
+ try {
442
+ let updatemodel = null;
443
+ let money = false;
444
+ for (let key in model) {
445
+ if (key.startsWith("$")) {
446
+ money = true;
447
+ }
448
+ }
449
+ if (!money) {
450
+ updatemodel = { "$set": model };
451
+ }
452
+ else {
453
+ updatemodel = model;
454
+ }
455
+ let col = this._mongoDb.collection(collection);
456
+ up_rs = await col.updateOne(where, updatemodel, options);
457
+ }
458
+ catch (e) {
459
+ Log_1.gLog.error({ collection, model, where, options });
460
+ Log_1.gLog.error(e.stack);
461
+ rs.errcode = _error_1.EErrorCode.Mongo_Error;
462
+ }
463
+ rs.rs = up_rs;
464
+ if (up_rs?.upsertedId || _id) {
465
+ model["_id"] = up_rs?.upsertedId || _id;
466
+ }
467
+ return rs;
468
+ }
469
+ async updateMany(collection, where, model, options) {
470
+ this._convertWhere(where);
471
+ let rs = { errcode: null, rs: null };
472
+ if (!this._mongoDb) {
473
+ rs.errcode = _error_1.EErrorCode.No_Mongo;
474
+ return rs;
475
+ }
476
+ let up_rs = null;
477
+ try {
478
+ let updateModel = null;
479
+ let firstKey = Object.keys(model)[0];
480
+ if (!firstKey.startsWith("$")) {
481
+ updateModel = { $set: model };
482
+ }
483
+ else {
484
+ updateModel = model;
485
+ }
486
+ let col = this._mongoDb.collection(collection);
487
+ up_rs = await col.updateMany(where, updateModel, options);
488
+ }
489
+ catch (e) {
490
+ Log_1.gLog.error({ collection, model, where, options });
491
+ Log_1.gLog.error(e.stack);
492
+ rs.errcode = _error_1.EErrorCode.Mongo_Error;
493
+ }
494
+ rs.rs = up_rs;
495
+ return rs;
496
+ }
497
+ async createIndex(collection, index, options) {
498
+ let rs = { errcode: null, rs: null };
499
+ if (!this._mongoDb) {
500
+ rs.errcode = _error_1.EErrorCode.No_Mongo;
501
+ return rs;
502
+ }
503
+ let i_rs = null;
504
+ try {
505
+ let col = this._mongoDb.collection(collection);
506
+ i_rs = await col.createIndex(index, options);
507
+ }
508
+ catch (e) {
509
+ Log_1.gLog.error({ collection, index });
510
+ Log_1.gLog.error(e.stack);
511
+ rs.errcode = _error_1.EErrorCode.Mongo_Error;
512
+ }
513
+ rs.rs = i_rs;
514
+ return rs;
515
+ }
516
+ async simpleAggregate(collection, where, property, size, random_size) {
517
+ this._convertWhere(where);
518
+ let rs = { errcode: null, list: null };
519
+ if (!this._mongoDb) {
520
+ rs.errcode = _error_1.EErrorCode.No_Mongo;
521
+ return rs;
522
+ }
523
+ let list = [];
524
+ try {
525
+ let col = this._mongoDb.collection(collection);
526
+ let params = [];
527
+ if (where) {
528
+ params.push({ '$match': where });
529
+ }
530
+ if (property) {
531
+ params.push({ '$project': property });
532
+ }
533
+ if (random_size) {
534
+ params.push({ '$sample': { 'size': random_size } });
535
+ }
536
+ let agg = col.aggregate(params);
537
+ if (size) {
538
+ list = await agg.limit(size).toArray();
539
+ }
540
+ else {
541
+ list = await agg.toArray();
542
+ }
543
+ }
544
+ catch (e) {
545
+ Log_1.gLog.error(e.stack);
546
+ rs.errcode = _error_1.EErrorCode.Mongo_Error;
547
+ }
548
+ rs.list = list;
549
+ return rs;
550
+ }
551
+ aggregate(collection, pipeline, options) {
552
+ if (!this._mongoDb) {
553
+ return;
554
+ }
555
+ let col = this._mongoDb.collection(collection);
556
+ let agg = col.aggregate(pipeline, options);
557
+ return agg;
558
+ }
559
+ /**
560
+ * 快速事务
561
+ * @param collection
562
+ * @param cb
563
+ */
564
+ async quickTransaction(cb, options) {
565
+ if (!this._mongoDb) {
566
+ return false;
567
+ }
568
+ let session = this._mongoClient.startSession();
569
+ session.startTransaction(options);
570
+ try {
571
+ let rs = await cb(session);
572
+ await session.commitTransaction();
573
+ session.endSession();
574
+ return rs;
575
+ }
576
+ catch (e) {
577
+ await session.abortTransaction();
578
+ Log_1.gLog.error(e.stack);
579
+ }
580
+ finally {
581
+ await session.endSession();
582
+ }
583
+ return false;
584
+ }
585
+ async bulkWrite(collection, operations, options) {
586
+ if (!this._mongoDb) {
587
+ return;
588
+ }
589
+ let bulk = this._mongoDb.collection(collection);
590
+ let bwr = bulk.bulkWrite(operations, options);
591
+ return bwr;
592
+ }
593
+ }
594
+ exports.MongoExt = MongoExt;
595
+ exports.gMongoMgr = new MongoManager();