@cloudbase/database 1.3.0 → 1.4.1

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 (210) hide show
  1. package/README.md +32 -10
  2. package/dist/commonjs/ObjectId/index.d.ts +11 -0
  3. package/dist/commonjs/ObjectId/index.js +21 -0
  4. package/dist/commonjs/aggregate.d.ts +29 -29
  5. package/dist/commonjs/aggregate.js +124 -124
  6. package/dist/commonjs/collection.d.ts +17 -17
  7. package/dist/commonjs/collection.js +72 -72
  8. package/dist/commonjs/command.d.ts +175 -175
  9. package/dist/commonjs/command.js +285 -285
  10. package/dist/commonjs/commands/logic.d.ts +24 -24
  11. package/dist/commonjs/commands/logic.js +79 -79
  12. package/dist/commonjs/commands/query.d.ts +73 -73
  13. package/dist/commonjs/commands/query.js +147 -147
  14. package/dist/commonjs/commands/update.d.ts +29 -29
  15. package/dist/commonjs/commands/update.js +49 -49
  16. package/dist/commonjs/config/app.config.d.ts +6 -6
  17. package/dist/commonjs/config/app.config.js +7 -7
  18. package/dist/commonjs/config/error.config.d.ts +3 -3
  19. package/dist/commonjs/config/error.config.js +15 -15
  20. package/dist/commonjs/const/code.d.ts +34 -34
  21. package/dist/commonjs/const/code.js +36 -36
  22. package/dist/commonjs/constant.d.ts +54 -54
  23. package/dist/commonjs/constant.js +76 -76
  24. package/dist/commonjs/document.d.ts +14 -14
  25. package/dist/commonjs/document.js +219 -219
  26. package/dist/commonjs/geo/index.d.ts +6 -6
  27. package/dist/commonjs/geo/index.js +11 -11
  28. package/dist/commonjs/geo/interface.d.ts +24 -24
  29. package/dist/commonjs/geo/interface.js +2 -2
  30. package/dist/commonjs/geo/lineString.d.ts +19 -19
  31. package/dist/commonjs/geo/lineString.js +57 -57
  32. package/dist/commonjs/geo/multiLineString.d.ts +18 -18
  33. package/dist/commonjs/geo/multiLineString.js +56 -56
  34. package/dist/commonjs/geo/multiPoint.d.ts +18 -18
  35. package/dist/commonjs/geo/multiPoint.js +50 -50
  36. package/dist/commonjs/geo/multiPolygon.d.ts +18 -18
  37. package/dist/commonjs/geo/multiPolygon.js +62 -62
  38. package/dist/commonjs/geo/point.d.ts +19 -19
  39. package/dist/commonjs/geo/point.js +43 -43
  40. package/dist/commonjs/geo/polygon.d.ts +19 -19
  41. package/dist/commonjs/geo/polygon.js +70 -70
  42. package/dist/commonjs/helper/symbol.d.ts +15 -14
  43. package/dist/commonjs/helper/symbol.js +20 -19
  44. package/dist/commonjs/index.d.ts +50 -49
  45. package/dist/commonjs/index.js +41 -39
  46. package/dist/commonjs/operator-map.d.ts +4 -4
  47. package/dist/commonjs/operator-map.js +23 -23
  48. package/dist/commonjs/query.d.ts +38 -38
  49. package/dist/commonjs/query.js +247 -247
  50. package/dist/commonjs/realtime/error.d.ts +7 -7
  51. package/dist/commonjs/realtime/error.js +11 -11
  52. package/dist/commonjs/realtime/listener.d.ts +14 -14
  53. package/dist/commonjs/realtime/listener.js +17 -17
  54. package/dist/commonjs/realtime/message.d.ts +3 -3
  55. package/dist/commonjs/realtime/message.js +10 -10
  56. package/dist/commonjs/realtime/snapshot.d.ts +16 -16
  57. package/dist/commonjs/realtime/snapshot.js +42 -42
  58. package/dist/commonjs/realtime/virtual-websocket-client.d.ts +63 -63
  59. package/dist/commonjs/realtime/virtual-websocket-client.js +736 -736
  60. package/dist/commonjs/realtime/websocket-client.d.ts +78 -78
  61. package/dist/commonjs/realtime/websocket-client.js +567 -567
  62. package/dist/commonjs/realtime/ws-event.d.ts +126 -126
  63. package/dist/commonjs/realtime/ws-event.js +139 -139
  64. package/dist/commonjs/regexp/index.d.ts +18 -18
  65. package/dist/commonjs/regexp/index.js +30 -30
  66. package/dist/commonjs/serializer/common.d.ts +11 -11
  67. package/dist/commonjs/serializer/common.js +90 -90
  68. package/dist/commonjs/serializer/datatype.d.ts +7 -7
  69. package/dist/commonjs/serializer/datatype.js +99 -96
  70. package/dist/commonjs/serializer/query.d.ts +8 -8
  71. package/dist/commonjs/serializer/query.js +254 -254
  72. package/dist/commonjs/serializer/update.d.ts +16 -16
  73. package/dist/commonjs/serializer/update.js +142 -142
  74. package/dist/commonjs/serverDate/index.d.ts +13 -13
  75. package/dist/commonjs/serverDate/index.js +23 -23
  76. package/dist/commonjs/transaction/index.d.ts +30 -30
  77. package/dist/commonjs/transaction/index.js +105 -105
  78. package/dist/commonjs/transaction.d.ts +42 -42
  79. package/dist/commonjs/transaction.js +126 -126
  80. package/dist/commonjs/typings/index.d.ts +45 -45
  81. package/dist/commonjs/typings/index.js +2 -2
  82. package/dist/commonjs/typings/realtime.d.ts +219 -219
  83. package/dist/commonjs/typings/realtime.js +2 -2
  84. package/dist/commonjs/util.d.ts +9 -9
  85. package/dist/commonjs/util.js +101 -101
  86. package/dist/commonjs/utils/error.d.ts +37 -37
  87. package/dist/commonjs/utils/error.js +55 -55
  88. package/dist/commonjs/utils/symbol.d.ts +8 -8
  89. package/dist/commonjs/utils/symbol.js +39 -39
  90. package/dist/commonjs/utils/type.d.ts +13 -13
  91. package/dist/commonjs/utils/type.js +22 -22
  92. package/dist/commonjs/utils/utils.d.ts +19 -19
  93. package/dist/commonjs/utils/utils.js +59 -59
  94. package/dist/commonjs/validate.d.ts +1 -1
  95. package/dist/commonjs/validate.js +155 -155
  96. package/dist/esm/ObjectId/index.d.ts +11 -0
  97. package/dist/esm/ObjectId/index.js +17 -0
  98. package/dist/esm/aggregate.d.ts +29 -29
  99. package/dist/esm/aggregate.js +121 -121
  100. package/dist/esm/collection.d.ts +17 -17
  101. package/dist/esm/collection.js +69 -69
  102. package/dist/esm/command.d.ts +175 -175
  103. package/dist/esm/command.js +281 -281
  104. package/dist/esm/commands/logic.d.ts +24 -24
  105. package/dist/esm/commands/logic.js +74 -74
  106. package/dist/esm/commands/query.d.ts +73 -73
  107. package/dist/esm/commands/query.js +141 -141
  108. package/dist/esm/commands/update.d.ts +29 -29
  109. package/dist/esm/commands/update.js +44 -44
  110. package/dist/esm/config/app.config.d.ts +6 -6
  111. package/dist/esm/config/app.config.js +5 -5
  112. package/dist/esm/config/error.config.d.ts +3 -3
  113. package/dist/esm/config/error.config.js +13 -13
  114. package/dist/esm/const/code.d.ts +34 -34
  115. package/dist/esm/const/code.js +34 -34
  116. package/dist/esm/constant.d.ts +54 -54
  117. package/dist/esm/constant.js +67 -67
  118. package/dist/esm/document.d.ts +14 -14
  119. package/dist/esm/document.js +216 -216
  120. package/dist/esm/geo/index.d.ts +6 -6
  121. package/dist/esm/geo/index.js +6 -6
  122. package/dist/esm/geo/interface.d.ts +24 -24
  123. package/dist/esm/geo/lineString.d.ts +19 -19
  124. package/dist/esm/geo/lineString.js +54 -54
  125. package/dist/esm/geo/multiLineString.d.ts +18 -18
  126. package/dist/esm/geo/multiLineString.js +53 -53
  127. package/dist/esm/geo/multiPoint.d.ts +18 -18
  128. package/dist/esm/geo/multiPoint.js +47 -47
  129. package/dist/esm/geo/multiPolygon.d.ts +18 -18
  130. package/dist/esm/geo/multiPolygon.js +59 -59
  131. package/dist/esm/geo/point.d.ts +19 -19
  132. package/dist/esm/geo/point.js +40 -40
  133. package/dist/esm/geo/polygon.d.ts +19 -19
  134. package/dist/esm/geo/polygon.js +67 -67
  135. package/dist/esm/helper/symbol.d.ts +15 -14
  136. package/dist/esm/helper/symbol.js +15 -14
  137. package/dist/esm/index.d.ts +50 -49
  138. package/dist/esm/index.js +35 -33
  139. package/dist/esm/operator-map.d.ts +4 -4
  140. package/dist/esm/operator-map.js +20 -20
  141. package/dist/esm/query.d.ts +38 -38
  142. package/dist/esm/query.js +244 -244
  143. package/dist/esm/realtime/error.d.ts +7 -7
  144. package/dist/esm/realtime/error.js +8 -8
  145. package/dist/esm/realtime/listener.d.ts +14 -14
  146. package/dist/esm/realtime/listener.js +14 -14
  147. package/dist/esm/realtime/message.d.ts +3 -3
  148. package/dist/esm/realtime/message.js +6 -6
  149. package/dist/esm/realtime/snapshot.d.ts +16 -16
  150. package/dist/esm/realtime/snapshot.js +39 -39
  151. package/dist/esm/realtime/virtual-websocket-client.d.ts +63 -63
  152. package/dist/esm/realtime/virtual-websocket-client.js +733 -733
  153. package/dist/esm/realtime/websocket-client.d.ts +78 -78
  154. package/dist/esm/realtime/websocket-client.js +564 -564
  155. package/dist/esm/realtime/ws-event.d.ts +126 -126
  156. package/dist/esm/realtime/ws-event.js +137 -137
  157. package/dist/esm/regexp/index.d.ts +18 -18
  158. package/dist/esm/regexp/index.js +26 -26
  159. package/dist/esm/serializer/common.d.ts +11 -11
  160. package/dist/esm/serializer/common.js +82 -82
  161. package/dist/esm/serializer/datatype.d.ts +7 -7
  162. package/dist/esm/serializer/datatype.js +95 -92
  163. package/dist/esm/serializer/query.d.ts +8 -8
  164. package/dist/esm/serializer/query.js +251 -251
  165. package/dist/esm/serializer/update.d.ts +16 -16
  166. package/dist/esm/serializer/update.js +139 -139
  167. package/dist/esm/serverDate/index.d.ts +13 -13
  168. package/dist/esm/serverDate/index.js +19 -19
  169. package/dist/esm/transaction/index.d.ts +30 -30
  170. package/dist/esm/transaction/index.js +100 -100
  171. package/dist/esm/transaction.d.ts +42 -42
  172. package/dist/esm/transaction.js +121 -121
  173. package/dist/esm/typings/index.d.ts +45 -45
  174. package/dist/esm/typings/realtime.d.ts +219 -219
  175. package/dist/esm/util.d.ts +9 -9
  176. package/dist/esm/util.js +98 -98
  177. package/dist/esm/utils/error.d.ts +37 -37
  178. package/dist/esm/utils/error.js +49 -49
  179. package/dist/esm/utils/symbol.d.ts +8 -8
  180. package/dist/esm/utils/symbol.js +36 -36
  181. package/dist/esm/utils/type.d.ts +13 -13
  182. package/dist/esm/utils/type.js +20 -20
  183. package/dist/esm/utils/utils.d.ts +19 -19
  184. package/dist/esm/utils/utils.js +55 -55
  185. package/dist/esm/validate.d.ts +1 -1
  186. package/dist/esm/validate.js +152 -152
  187. package/package.json +1 -1
  188. package/src/ObjectId/index.ts +23 -0
  189. package/src/aggregate.ts +8 -5
  190. package/src/helper/symbol.ts +2 -0
  191. package/src/index.ts +4 -0
  192. package/src/serializer/datatype.ts +5 -1
  193. package/dist/commonjs/decimal128/index.d.ts +0 -8
  194. package/dist/commonjs/decimal128/index.js +0 -26
  195. package/dist/commonjs/lib/util.d.ts +0 -1
  196. package/dist/commonjs/lib/util.js +0 -25
  197. package/dist/commonjs/transaction/collection.d.ts +0 -7
  198. package/dist/commonjs/transaction/collection.js +0 -46
  199. package/dist/commonjs/transaction/document.d.ts +0 -27
  200. package/dist/commonjs/transaction/document.js +0 -205
  201. package/dist/commonjs/transaction/query.d.ts +0 -5
  202. package/dist/commonjs/transaction/query.js +0 -10
  203. package/dist/esm/lib/util.d.ts +0 -1
  204. package/dist/esm/lib/util.js +0 -23
  205. package/dist/esm/transaction/collection.d.ts +0 -7
  206. package/dist/esm/transaction/collection.js +0 -44
  207. package/dist/esm/transaction/document.d.ts +0 -27
  208. package/dist/esm/transaction/document.js +0 -203
  209. package/dist/esm/transaction/query.d.ts +0 -5
  210. package/dist/esm/transaction/query.js +0 -8
package/README.md CHANGED
@@ -15,7 +15,7 @@ yarn add @cloudbase/database
15
15
 
16
16
  ## 使用
17
17
 
18
- 使用 `@cloudbase/database` 时,需要提供发送请求的类 `reqClass`。
18
+ 使用 `@cloudbase/database` 时,需要提供发送请求的类 `reqClass`。
19
19
 
20
20
  ```js
21
21
  // index.js
@@ -38,23 +38,23 @@ class Tcb {
38
38
  // request.js
39
39
 
40
40
  // 进一步处理,鉴权等...
41
- const requestHandler = require('requestHandler');
41
+ const requestHandler = require('requestHandler')
42
42
 
43
43
  class Request {
44
44
  constructor(config) {
45
- this.config = config;
45
+ this.config = config
46
46
  }
47
47
 
48
48
  async send(action, data) {
49
49
  const params = Object.assign({}, data, {
50
50
  action
51
- });
51
+ })
52
52
 
53
53
  const slowQueryWarning = setTimeout(() => {
54
54
  console.warn(
55
55
  'Database operation is longer than 3s. Please check query performance and your network environment.'
56
- );
57
- }, 3000);
56
+ )
57
+ }, 3000)
58
58
 
59
59
  try {
60
60
  return await requestHandler({
@@ -65,14 +65,14 @@ class Request {
65
65
  headers: {
66
66
  'content-type': 'application/json'
67
67
  }
68
- });
68
+ })
69
69
  } finally {
70
- clearTimeout(slowQueryWarning);
70
+ clearTimeout(slowQueryWarning)
71
71
  }
72
72
  }
73
73
  }
74
74
 
75
- module.exports = Request;
75
+ module.exports = Request
76
76
  ```
77
77
 
78
78
  请求数据样例
@@ -94,4 +94,26 @@ module.exports = Request;
94
94
  },
95
95
  "json": true
96
96
  }
97
- ```
97
+ ```
98
+
99
+ ## 开发指南
100
+
101
+ ### 注意
102
+
103
+ 当前 database 库是通过分支来控制了两个不同的版本,主干版提供给@cloudbase/js-sdk 库使用,feature/support_db_2.0 分支提供给@cloudbase/node-sdk 库使用。
104
+
105
+ 两个分支区别:
106
+ support_db_2.0 分支进行了数据库接口的升级,将原有的 json 协议转换为 mongo 支持的 bson 协议处理,目的是解决旧接口存在的问题,描述如下
107
+
108
+ - 日期对象 是走约定协议处理,即转换为 {$date: timestamp},这种方式应摒弃(EJSON 协议可解决)
109
+ - 无法支持 null, NaN 等特殊类型处理(EJSON 协议可解决)
110
+ - serverDate 这种自定义类型的实现,是继续保留 还是摒弃
111
+ - 接口实现混杂,普通 CRUD 接口均走 flexdb,而聚合,事务又用 runcommand 方式
112
+ - 原插入文档接口返回 docId 形式混杂
113
+
114
+ 目前仅针对服务端 sdk @cloudbase/node-sdk 完成了升级,而客户端 sdk @cloudbase/js-sdk 以及 小程序端 SDK 仍保留为旧接口形式。
115
+
116
+ ### 开发及发布事项
117
+
118
+ 1. 数据库接口的改动务必补充测试用例验证
119
+ 2. 发布时,约定 feature/support_db_2.0 分支上发布正式版(for @cloudbase/node-sdk)使用,master 分支上发布 beta 版 (for @cloudbase/js-sdk)使用。两 sdk 均通过锁版本方式依赖该库,不会受自动更新依赖影响。
@@ -0,0 +1,11 @@
1
+ export declare class ObjectId {
2
+ id: string;
3
+ constructor({ id }?: {
4
+ id?: string;
5
+ });
6
+ readonly _internalType: import("../utils/symbol").InternalSymbol;
7
+ parse(): {
8
+ $oid: string;
9
+ };
10
+ }
11
+ export declare function ObjectIdConstructor(opt: any): ObjectId;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const symbol_1 = require("../helper/symbol");
4
+ class ObjectId {
5
+ constructor({ id = '' } = {}) {
6
+ this.id = id;
7
+ }
8
+ get _internalType() {
9
+ return symbol_1.SYMBOL_OBJECTID;
10
+ }
11
+ parse() {
12
+ return {
13
+ $oid: this.id
14
+ };
15
+ }
16
+ }
17
+ exports.ObjectId = ObjectId;
18
+ function ObjectIdConstructor(opt) {
19
+ return new ObjectId(opt);
20
+ }
21
+ exports.ObjectIdConstructor = ObjectIdConstructor;
@@ -1,29 +1,29 @@
1
- export default class Aggregation {
2
- _db: any;
3
- _request: any;
4
- _stages: any[];
5
- _collectionName: string;
6
- constructor(db?: any, collectionName?: any, rawPipeline?: any);
7
- end(): Promise<any>;
8
- unwrap(): any[];
9
- done(): {
10
- [x: number]: any;
11
- }[];
12
- _pipe(stage: any, param: any, raw?: boolean): this;
13
- addFields(param: any): this;
14
- bucket(param: any): this;
15
- bucketAuto(param: any): this;
16
- count(param: any): this;
17
- geoNear(param: any): this;
18
- group(param: any): this;
19
- limit(param: any): this;
20
- match(param: any): this;
21
- project(param: any): this;
22
- lookup(param: any): this;
23
- replaceRoot(param: any): this;
24
- sample(param: any): this;
25
- skip(param: any): this;
26
- sort(param: any): this;
27
- sortByCount(param: any): this;
28
- unwind(param: any): this;
29
- }
1
+ export default class Aggregation {
2
+ _db: any;
3
+ _request: any;
4
+ _stages: any[];
5
+ _collectionName: string;
6
+ constructor(db?: any, collectionName?: any, rawPipeline?: any);
7
+ end(): Promise<any>;
8
+ unwrap(): any[];
9
+ done(): {
10
+ [x: number]: any;
11
+ }[];
12
+ _pipe(stage: any, param: any, raw?: boolean): this;
13
+ addFields(param: any): this;
14
+ bucket(param: any): this;
15
+ bucketAuto(param: any): this;
16
+ count(param: any): this;
17
+ geoNear(param: any): this;
18
+ group(param: any): this;
19
+ limit(param: any): this;
20
+ match(param: any): this;
21
+ project(param: any): this;
22
+ lookup(param: any): this;
23
+ replaceRoot(param: any): this;
24
+ sample(param: any): this;
25
+ skip(param: any): this;
26
+ sort(param: any): this;
27
+ sortByCount(param: any): this;
28
+ unwind(param: any): this;
29
+ }
@@ -1,124 +1,124 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const index_1 = require("./index");
4
- const bson_1 = require("bson");
5
- const query_1 = require("./serializer/query");
6
- const utils_1 = require("./utils/utils");
7
- const type_1 = require("./utils/type");
8
- const validate_1 = require("./validate");
9
- const EARTH_RADIUS = 6378100;
10
- class Aggregation {
11
- constructor(db, collectionName, rawPipeline) {
12
- this._stages = [];
13
- if (db && collectionName) {
14
- this._db = db;
15
- this._request = new index_1.Db.reqClass(this._db.config);
16
- this._collectionName = collectionName;
17
- if (rawPipeline && rawPipeline.length > 0) {
18
- rawPipeline.forEach((stage) => {
19
- validate_1.Validate.isValidAggregation(stage);
20
- const stageName = Object.keys(stage)[0];
21
- this._pipe(stageName, stage[stageName], true);
22
- });
23
- }
24
- }
25
- }
26
- async end() {
27
- if (!this._collectionName || !this._db) {
28
- throw new Error('Aggregation pipeline cannot send request');
29
- }
30
- const result = await this._request.send('database.aggregateDocuments', {
31
- collectionName: this._collectionName,
32
- stages: this._stages
33
- });
34
- if (result && result.data && result.data.list) {
35
- return {
36
- requestId: result.requestId,
37
- data: result.data.list.map(bson_1.EJSON.parse)
38
- };
39
- }
40
- return result;
41
- }
42
- unwrap() {
43
- return this._stages;
44
- }
45
- done() {
46
- return this._stages.map(({ stageKey, stageValue }) => {
47
- return {
48
- [stageKey]: JSON.parse(stageValue)
49
- };
50
- });
51
- }
52
- _pipe(stage, param, raw = false) {
53
- let transformParam = '';
54
- if (type_1.getType(param) === 'object') {
55
- transformParam = utils_1.stringifyByEJSON(param);
56
- }
57
- else {
58
- transformParam = JSON.stringify(param);
59
- }
60
- this._stages.push({
61
- stageKey: raw ? stage : `$${stage}`,
62
- stageValue: transformParam
63
- });
64
- return this;
65
- }
66
- addFields(param) {
67
- return this._pipe('addFields', param);
68
- }
69
- bucket(param) {
70
- return this._pipe('bucket', param);
71
- }
72
- bucketAuto(param) {
73
- return this._pipe('bucketAuto', param);
74
- }
75
- count(param) {
76
- return this._pipe('count', param);
77
- }
78
- geoNear(param) {
79
- if (param.query) {
80
- param.query = query_1.QuerySerializer.encode(param.query);
81
- }
82
- if (param.distanceMultiplier && typeof (param.distanceMultiplier) === 'number') {
83
- param.distanceMultiplier = param.distanceMultiplier * EARTH_RADIUS;
84
- }
85
- else {
86
- param.distanceMultiplier = EARTH_RADIUS;
87
- }
88
- return this._pipe('geoNear', param);
89
- }
90
- group(param) {
91
- return this._pipe('group', param);
92
- }
93
- limit(param) {
94
- return this._pipe('limit', param);
95
- }
96
- match(param) {
97
- return this._pipe('match', query_1.QuerySerializer.encode(param));
98
- }
99
- project(param) {
100
- return this._pipe('project', param);
101
- }
102
- lookup(param) {
103
- return this._pipe('lookup', param);
104
- }
105
- replaceRoot(param) {
106
- return this._pipe('replaceRoot', param);
107
- }
108
- sample(param) {
109
- return this._pipe('sample', param);
110
- }
111
- skip(param) {
112
- return this._pipe('skip', param);
113
- }
114
- sort(param) {
115
- return this._pipe('sort', param);
116
- }
117
- sortByCount(param) {
118
- return this._pipe('sortByCount', param);
119
- }
120
- unwind(param) {
121
- return this._pipe('unwind', param);
122
- }
123
- }
124
- exports.default = Aggregation;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const index_1 = require("./index");
4
+ const bson_1 = require("bson");
5
+ const query_1 = require("./serializer/query");
6
+ const utils_1 = require("./utils/utils");
7
+ const type_1 = require("./utils/type");
8
+ const validate_1 = require("./validate");
9
+ const point_1 = require("./geo/point");
10
+ class Aggregation {
11
+ constructor(db, collectionName, rawPipeline) {
12
+ this._stages = [];
13
+ if (db && collectionName) {
14
+ this._db = db;
15
+ this._request = new index_1.Db.reqClass(this._db.config);
16
+ this._collectionName = collectionName;
17
+ if (rawPipeline && rawPipeline.length > 0) {
18
+ rawPipeline.forEach((stage) => {
19
+ validate_1.Validate.isValidAggregation(stage);
20
+ const stageName = Object.keys(stage)[0];
21
+ this._pipe(stageName, stage[stageName], true);
22
+ });
23
+ }
24
+ }
25
+ }
26
+ async end() {
27
+ if (!this._collectionName || !this._db) {
28
+ throw new Error('Aggregation pipeline cannot send request');
29
+ }
30
+ const result = await this._request.send('database.aggregateDocuments', {
31
+ collectionName: this._collectionName,
32
+ stages: this._stages
33
+ });
34
+ if (result && result.data && result.data.list) {
35
+ return {
36
+ requestId: result.requestId,
37
+ data: result.data.list.map(bson_1.EJSON.parse)
38
+ };
39
+ }
40
+ return result;
41
+ }
42
+ unwrap() {
43
+ return this._stages;
44
+ }
45
+ done() {
46
+ return this._stages.map(({ stageKey, stageValue }) => {
47
+ return {
48
+ [stageKey]: JSON.parse(stageValue)
49
+ };
50
+ });
51
+ }
52
+ _pipe(stage, param, raw = false) {
53
+ let transformParam = '';
54
+ if (type_1.getType(param) === 'object') {
55
+ transformParam = utils_1.stringifyByEJSON(param);
56
+ }
57
+ else {
58
+ transformParam = JSON.stringify(param);
59
+ }
60
+ this._stages.push({
61
+ stageKey: raw ? stage : `$${stage}`,
62
+ stageValue: transformParam
63
+ });
64
+ return this;
65
+ }
66
+ addFields(param) {
67
+ return this._pipe('addFields', param);
68
+ }
69
+ bucket(param) {
70
+ return this._pipe('bucket', param);
71
+ }
72
+ bucketAuto(param) {
73
+ return this._pipe('bucketAuto', param);
74
+ }
75
+ count(param) {
76
+ return this._pipe('count', param);
77
+ }
78
+ geoNear(param) {
79
+ if (param.query) {
80
+ param.query = query_1.QuerySerializer.encode(param.query);
81
+ }
82
+ if (param.distanceMultiplier && typeof (param.distanceMultiplier) === 'number') {
83
+ param.distanceMultiplier = param.distanceMultiplier;
84
+ }
85
+ if (param.near) {
86
+ param.near = new point_1.Point(param.near.longitude, param.near.latitude).toJSON();
87
+ }
88
+ return this._pipe('geoNear', param);
89
+ }
90
+ group(param) {
91
+ return this._pipe('group', param);
92
+ }
93
+ limit(param) {
94
+ return this._pipe('limit', param);
95
+ }
96
+ match(param) {
97
+ return this._pipe('match', query_1.QuerySerializer.encode(param));
98
+ }
99
+ project(param) {
100
+ return this._pipe('project', param);
101
+ }
102
+ lookup(param) {
103
+ return this._pipe('lookup', param);
104
+ }
105
+ replaceRoot(param) {
106
+ return this._pipe('replaceRoot', param);
107
+ }
108
+ sample(param) {
109
+ return this._pipe('sample', param);
110
+ }
111
+ skip(param) {
112
+ return this._pipe('skip', param);
113
+ }
114
+ sort(param) {
115
+ return this._pipe('sort', param);
116
+ }
117
+ sortByCount(param) {
118
+ return this._pipe('sortByCount', param);
119
+ }
120
+ unwind(param) {
121
+ return this._pipe('unwind', param);
122
+ }
123
+ }
124
+ exports.default = Aggregation;
@@ -1,17 +1,17 @@
1
- import { DocumentReference } from './document';
2
- import { Query, QueryOption, UpdateOption } from './query';
3
- import Aggregation from './aggregate';
4
- export declare class CollectionReference extends Query {
5
- protected _transactionId: string;
6
- readonly name: string;
7
- doc(docID: string | number): DocumentReference;
8
- add(data: any): Promise<{
9
- ids?: string[];
10
- id?: string;
11
- inserted?: number;
12
- ok?: number;
13
- requestId: string;
14
- }>;
15
- aggregate(rawPipeline?: object[]): Aggregation;
16
- options(apiOptions: QueryOption | UpdateOption): CollectionReference;
17
- }
1
+ import { DocumentReference } from './document';
2
+ import { Query, QueryOption, UpdateOption } from './query';
3
+ import Aggregation from './aggregate';
4
+ export declare class CollectionReference extends Query {
5
+ protected _transactionId: string;
6
+ readonly name: string;
7
+ doc(docID: string | number): DocumentReference;
8
+ add(data: any): Promise<{
9
+ ids?: string[];
10
+ id?: string;
11
+ inserted?: number;
12
+ ok?: number;
13
+ requestId: string;
14
+ }>;
15
+ aggregate(rawPipeline?: object[]): Aggregation;
16
+ options(apiOptions: QueryOption | UpdateOption): CollectionReference;
17
+ }
@@ -1,72 +1,72 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const document_1 = require("./document");
4
- const query_1 = require("./query");
5
- const aggregate_1 = require("./aggregate");
6
- const datatype_1 = require("./serializer/datatype");
7
- const utils_1 = require("./utils/utils");
8
- const validate_1 = require("./validate");
9
- const type_1 = require("./utils/type");
10
- class CollectionReference extends query_1.Query {
11
- constructor(db, coll, apiOptions, transactionId) {
12
- super(db, coll, '', apiOptions, transactionId);
13
- if (transactionId) {
14
- this._transactionId = transactionId;
15
- }
16
- }
17
- get name() {
18
- return this._coll;
19
- }
20
- doc(docID) {
21
- if (typeof docID !== 'string' && typeof docID !== 'number') {
22
- throw new Error('docId必须为字符串或数字');
23
- }
24
- return new document_1.DocumentReference(this._db, this._coll, this._apiOptions, docID, this._transactionId);
25
- }
26
- async add(data) {
27
- let transformData = data;
28
- if (!type_1.isArray(data)) {
29
- transformData = [data];
30
- }
31
- transformData = transformData.map(item => {
32
- return utils_1.stringifyByEJSON(datatype_1.serialize(item));
33
- });
34
- let params = {
35
- collectionName: this._coll,
36
- data: transformData
37
- };
38
- if (this._transactionId) {
39
- params.transactionId = this._transactionId;
40
- }
41
- const res = await this._request.send('database.insertDocument', params, utils_1.getReqOpts(this._apiOptions));
42
- if (res.code) {
43
- return res;
44
- }
45
- if (!type_1.isArray(data)) {
46
- if (this._transactionId) {
47
- return {
48
- inserted: 1,
49
- ok: 1,
50
- id: res.data.insertedIds[0],
51
- requestId: res.requestId
52
- };
53
- }
54
- return {
55
- id: res.data.insertedIds[0],
56
- requestId: res.requestId
57
- };
58
- }
59
- return {
60
- ids: res.data.insertedIds,
61
- requestId: res.requestId
62
- };
63
- }
64
- aggregate(rawPipeline = []) {
65
- return new aggregate_1.default(this._db, this._coll, (this._apiOptions.raw || false) ? rawPipeline : []);
66
- }
67
- options(apiOptions) {
68
- validate_1.Validate.isValidOptions(apiOptions);
69
- return new CollectionReference(this._db, this._coll, apiOptions, this._transactionId);
70
- }
71
- }
72
- exports.CollectionReference = CollectionReference;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const document_1 = require("./document");
4
+ const query_1 = require("./query");
5
+ const aggregate_1 = require("./aggregate");
6
+ const datatype_1 = require("./serializer/datatype");
7
+ const utils_1 = require("./utils/utils");
8
+ const validate_1 = require("./validate");
9
+ const type_1 = require("./utils/type");
10
+ class CollectionReference extends query_1.Query {
11
+ constructor(db, coll, apiOptions, transactionId) {
12
+ super(db, coll, '', apiOptions, transactionId);
13
+ if (transactionId) {
14
+ this._transactionId = transactionId;
15
+ }
16
+ }
17
+ get name() {
18
+ return this._coll;
19
+ }
20
+ doc(docID) {
21
+ if (typeof docID !== 'string' && typeof docID !== 'number') {
22
+ throw new Error('docId必须为字符串或数字');
23
+ }
24
+ return new document_1.DocumentReference(this._db, this._coll, this._apiOptions, docID, this._transactionId);
25
+ }
26
+ async add(data) {
27
+ let transformData = data;
28
+ if (!type_1.isArray(data)) {
29
+ transformData = [data];
30
+ }
31
+ transformData = transformData.map(item => {
32
+ return utils_1.stringifyByEJSON(datatype_1.serialize(item));
33
+ });
34
+ let params = {
35
+ collectionName: this._coll,
36
+ data: transformData
37
+ };
38
+ if (this._transactionId) {
39
+ params.transactionId = this._transactionId;
40
+ }
41
+ const res = await this._request.send('database.insertDocument', params, utils_1.getReqOpts(this._apiOptions));
42
+ if (res.code) {
43
+ return res;
44
+ }
45
+ if (!type_1.isArray(data)) {
46
+ if (this._transactionId) {
47
+ return {
48
+ inserted: 1,
49
+ ok: 1,
50
+ id: res.data.insertedIds[0],
51
+ requestId: res.requestId
52
+ };
53
+ }
54
+ return {
55
+ id: res.data.insertedIds[0],
56
+ requestId: res.requestId
57
+ };
58
+ }
59
+ return {
60
+ ids: res.data.insertedIds,
61
+ requestId: res.requestId
62
+ };
63
+ }
64
+ aggregate(rawPipeline = []) {
65
+ return new aggregate_1.default(this._db, this._coll, (this._apiOptions.raw || false) ? rawPipeline : []);
66
+ }
67
+ options(apiOptions) {
68
+ validate_1.Validate.isValidOptions(apiOptions);
69
+ return new CollectionReference(this._db, this._coll, apiOptions, this._transactionId);
70
+ }
71
+ }
72
+ exports.CollectionReference = CollectionReference;