@cloudbase/database 1.4.1 → 1.4.3-alpha.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 (205) hide show
  1. package/dist/commonjs/ObjectId/index.d.ts +11 -11
  2. package/dist/commonjs/ObjectId/index.js +21 -21
  3. package/dist/commonjs/aggregate.d.ts +29 -29
  4. package/dist/commonjs/aggregate.js +124 -124
  5. package/dist/commonjs/collection.d.ts +17 -17
  6. package/dist/commonjs/collection.js +72 -72
  7. package/dist/commonjs/command.d.ts +175 -175
  8. package/dist/commonjs/command.js +285 -285
  9. package/dist/commonjs/commands/logic.d.ts +24 -24
  10. package/dist/commonjs/commands/logic.js +79 -79
  11. package/dist/commonjs/commands/query.d.ts +73 -73
  12. package/dist/commonjs/commands/query.js +147 -147
  13. package/dist/commonjs/commands/update.d.ts +29 -29
  14. package/dist/commonjs/commands/update.js +49 -49
  15. package/dist/commonjs/config/app.config.d.ts +6 -6
  16. package/dist/commonjs/config/app.config.js +7 -7
  17. package/dist/commonjs/config/error.config.d.ts +3 -3
  18. package/dist/commonjs/config/error.config.js +15 -15
  19. package/dist/commonjs/const/code.d.ts +34 -34
  20. package/dist/commonjs/const/code.js +36 -36
  21. package/dist/commonjs/constant.d.ts +54 -54
  22. package/dist/commonjs/constant.js +76 -76
  23. package/dist/commonjs/document.d.ts +14 -14
  24. package/dist/commonjs/document.js +217 -219
  25. package/dist/commonjs/geo/index.d.ts +6 -6
  26. package/dist/commonjs/geo/index.js +11 -11
  27. package/dist/commonjs/geo/interface.d.ts +24 -24
  28. package/dist/commonjs/geo/interface.js +2 -2
  29. package/dist/commonjs/geo/lineString.d.ts +19 -19
  30. package/dist/commonjs/geo/lineString.js +57 -57
  31. package/dist/commonjs/geo/multiLineString.d.ts +18 -18
  32. package/dist/commonjs/geo/multiLineString.js +56 -56
  33. package/dist/commonjs/geo/multiPoint.d.ts +18 -18
  34. package/dist/commonjs/geo/multiPoint.js +50 -50
  35. package/dist/commonjs/geo/multiPolygon.d.ts +18 -18
  36. package/dist/commonjs/geo/multiPolygon.js +62 -62
  37. package/dist/commonjs/geo/point.d.ts +19 -19
  38. package/dist/commonjs/geo/point.js +43 -43
  39. package/dist/commonjs/geo/polygon.d.ts +19 -19
  40. package/dist/commonjs/geo/polygon.js +70 -70
  41. package/dist/commonjs/helper/symbol.d.ts +15 -15
  42. package/dist/commonjs/helper/symbol.js +20 -20
  43. package/dist/commonjs/index.d.ts +52 -50
  44. package/dist/commonjs/index.js +41 -41
  45. package/dist/commonjs/lib/util.d.ts +1 -0
  46. package/dist/commonjs/lib/util.js +25 -0
  47. package/dist/commonjs/operator-map.d.ts +4 -4
  48. package/dist/commonjs/operator-map.js +23 -23
  49. package/dist/commonjs/query.d.ts +38 -38
  50. package/dist/commonjs/query.js +249 -247
  51. package/dist/commonjs/realtime/error.d.ts +7 -7
  52. package/dist/commonjs/realtime/error.js +11 -11
  53. package/dist/commonjs/realtime/listener.d.ts +14 -14
  54. package/dist/commonjs/realtime/listener.js +17 -17
  55. package/dist/commonjs/realtime/message.d.ts +3 -3
  56. package/dist/commonjs/realtime/message.js +10 -10
  57. package/dist/commonjs/realtime/snapshot.d.ts +16 -16
  58. package/dist/commonjs/realtime/snapshot.js +42 -42
  59. package/dist/commonjs/realtime/virtual-websocket-client.d.ts +63 -63
  60. package/dist/commonjs/realtime/virtual-websocket-client.js +736 -736
  61. package/dist/commonjs/realtime/websocket-client.d.ts +78 -78
  62. package/dist/commonjs/realtime/websocket-client.js +567 -567
  63. package/dist/commonjs/realtime/ws-event.d.ts +126 -126
  64. package/dist/commonjs/realtime/ws-event.js +139 -139
  65. package/dist/commonjs/regexp/index.d.ts +18 -18
  66. package/dist/commonjs/regexp/index.js +30 -30
  67. package/dist/commonjs/serializer/common.d.ts +11 -11
  68. package/dist/commonjs/serializer/common.js +90 -90
  69. package/dist/commonjs/serializer/datatype.d.ts +7 -7
  70. package/dist/commonjs/serializer/datatype.js +99 -99
  71. package/dist/commonjs/serializer/query.d.ts +8 -8
  72. package/dist/commonjs/serializer/query.js +254 -254
  73. package/dist/commonjs/serializer/update.d.ts +16 -16
  74. package/dist/commonjs/serializer/update.js +142 -142
  75. package/dist/commonjs/serverDate/index.d.ts +13 -13
  76. package/dist/commonjs/serverDate/index.js +23 -23
  77. package/dist/commonjs/transaction/collection.d.ts +7 -0
  78. package/dist/commonjs/transaction/collection.js +46 -0
  79. package/dist/commonjs/transaction/document.d.ts +27 -0
  80. package/dist/commonjs/transaction/document.js +205 -0
  81. package/dist/commonjs/transaction/index.d.ts +30 -30
  82. package/dist/commonjs/transaction/index.js +105 -105
  83. package/dist/commonjs/transaction/query.d.ts +5 -0
  84. package/dist/commonjs/transaction/query.js +10 -0
  85. package/dist/commonjs/transaction.d.ts +42 -42
  86. package/dist/commonjs/transaction.js +126 -126
  87. package/dist/commonjs/typings/index.d.ts +45 -45
  88. package/dist/commonjs/typings/index.js +2 -2
  89. package/dist/commonjs/typings/realtime.d.ts +219 -219
  90. package/dist/commonjs/typings/realtime.js +2 -2
  91. package/dist/commonjs/util.d.ts +9 -9
  92. package/dist/commonjs/util.js +101 -101
  93. package/dist/commonjs/utils/error.d.ts +37 -37
  94. package/dist/commonjs/utils/error.js +55 -55
  95. package/dist/commonjs/utils/symbol.d.ts +8 -8
  96. package/dist/commonjs/utils/symbol.js +39 -39
  97. package/dist/commonjs/utils/type.d.ts +13 -13
  98. package/dist/commonjs/utils/type.js +22 -22
  99. package/dist/commonjs/utils/utils.d.ts +19 -19
  100. package/dist/commonjs/utils/utils.js +59 -59
  101. package/dist/commonjs/validate.d.ts +1 -1
  102. package/dist/commonjs/validate.js +155 -155
  103. package/dist/esm/ObjectId/index.d.ts +11 -11
  104. package/dist/esm/ObjectId/index.js +17 -17
  105. package/dist/esm/aggregate.d.ts +29 -29
  106. package/dist/esm/aggregate.js +121 -121
  107. package/dist/esm/collection.d.ts +17 -17
  108. package/dist/esm/collection.js +69 -69
  109. package/dist/esm/command.d.ts +175 -175
  110. package/dist/esm/command.js +281 -281
  111. package/dist/esm/commands/logic.d.ts +24 -24
  112. package/dist/esm/commands/logic.js +74 -74
  113. package/dist/esm/commands/query.d.ts +73 -73
  114. package/dist/esm/commands/query.js +141 -141
  115. package/dist/esm/commands/update.d.ts +29 -29
  116. package/dist/esm/commands/update.js +44 -44
  117. package/dist/esm/config/app.config.d.ts +6 -6
  118. package/dist/esm/config/app.config.js +5 -5
  119. package/dist/esm/config/error.config.d.ts +3 -3
  120. package/dist/esm/config/error.config.js +13 -13
  121. package/dist/esm/const/code.d.ts +34 -34
  122. package/dist/esm/const/code.js +34 -34
  123. package/dist/esm/constant.d.ts +54 -54
  124. package/dist/esm/constant.js +67 -67
  125. package/dist/esm/document.d.ts +14 -14
  126. package/dist/esm/document.js +214 -216
  127. package/dist/esm/geo/index.d.ts +6 -6
  128. package/dist/esm/geo/index.js +6 -6
  129. package/dist/esm/geo/interface.d.ts +24 -24
  130. package/dist/esm/geo/lineString.d.ts +19 -19
  131. package/dist/esm/geo/lineString.js +54 -54
  132. package/dist/esm/geo/multiLineString.d.ts +18 -18
  133. package/dist/esm/geo/multiLineString.js +53 -53
  134. package/dist/esm/geo/multiPoint.d.ts +18 -18
  135. package/dist/esm/geo/multiPoint.js +47 -47
  136. package/dist/esm/geo/multiPolygon.d.ts +18 -18
  137. package/dist/esm/geo/multiPolygon.js +59 -59
  138. package/dist/esm/geo/point.d.ts +19 -19
  139. package/dist/esm/geo/point.js +40 -40
  140. package/dist/esm/geo/polygon.d.ts +19 -19
  141. package/dist/esm/geo/polygon.js +67 -67
  142. package/dist/esm/helper/symbol.d.ts +15 -15
  143. package/dist/esm/helper/symbol.js +15 -15
  144. package/dist/esm/index.d.ts +52 -50
  145. package/dist/esm/index.js +35 -35
  146. package/dist/esm/lib/util.d.ts +1 -0
  147. package/dist/esm/lib/util.js +23 -0
  148. package/dist/esm/operator-map.d.ts +4 -4
  149. package/dist/esm/operator-map.js +20 -20
  150. package/dist/esm/query.d.ts +38 -38
  151. package/dist/esm/query.js +246 -244
  152. package/dist/esm/realtime/error.d.ts +7 -7
  153. package/dist/esm/realtime/error.js +8 -8
  154. package/dist/esm/realtime/listener.d.ts +14 -14
  155. package/dist/esm/realtime/listener.js +14 -14
  156. package/dist/esm/realtime/message.d.ts +3 -3
  157. package/dist/esm/realtime/message.js +6 -6
  158. package/dist/esm/realtime/snapshot.d.ts +16 -16
  159. package/dist/esm/realtime/snapshot.js +39 -39
  160. package/dist/esm/realtime/virtual-websocket-client.d.ts +63 -63
  161. package/dist/esm/realtime/virtual-websocket-client.js +733 -733
  162. package/dist/esm/realtime/websocket-client.d.ts +78 -78
  163. package/dist/esm/realtime/websocket-client.js +564 -564
  164. package/dist/esm/realtime/ws-event.d.ts +126 -126
  165. package/dist/esm/realtime/ws-event.js +137 -137
  166. package/dist/esm/regexp/index.d.ts +18 -18
  167. package/dist/esm/regexp/index.js +26 -26
  168. package/dist/esm/serializer/common.d.ts +11 -11
  169. package/dist/esm/serializer/common.js +82 -82
  170. package/dist/esm/serializer/datatype.d.ts +7 -7
  171. package/dist/esm/serializer/datatype.js +95 -95
  172. package/dist/esm/serializer/query.d.ts +8 -8
  173. package/dist/esm/serializer/query.js +251 -251
  174. package/dist/esm/serializer/update.d.ts +16 -16
  175. package/dist/esm/serializer/update.js +139 -139
  176. package/dist/esm/serverDate/index.d.ts +13 -13
  177. package/dist/esm/serverDate/index.js +19 -19
  178. package/dist/esm/transaction/collection.d.ts +7 -0
  179. package/dist/esm/transaction/collection.js +44 -0
  180. package/dist/esm/transaction/document.d.ts +27 -0
  181. package/dist/esm/transaction/document.js +203 -0
  182. package/dist/esm/transaction/index.d.ts +30 -30
  183. package/dist/esm/transaction/index.js +100 -100
  184. package/dist/esm/transaction/query.d.ts +5 -0
  185. package/dist/esm/transaction/query.js +8 -0
  186. package/dist/esm/transaction.d.ts +42 -42
  187. package/dist/esm/transaction.js +121 -121
  188. package/dist/esm/typings/index.d.ts +45 -45
  189. package/dist/esm/typings/realtime.d.ts +219 -219
  190. package/dist/esm/util.d.ts +9 -9
  191. package/dist/esm/util.js +98 -98
  192. package/dist/esm/utils/error.d.ts +37 -37
  193. package/dist/esm/utils/error.js +49 -49
  194. package/dist/esm/utils/symbol.d.ts +8 -8
  195. package/dist/esm/utils/symbol.js +36 -36
  196. package/dist/esm/utils/type.d.ts +13 -13
  197. package/dist/esm/utils/type.js +20 -20
  198. package/dist/esm/utils/utils.d.ts +19 -19
  199. package/dist/esm/utils/utils.js +55 -55
  200. package/dist/esm/validate.d.ts +1 -1
  201. package/dist/esm/validate.js +152 -152
  202. package/package.json +1 -1
  203. package/src/document.ts +1 -3
  204. package/src/index.ts +2 -0
  205. package/src/query.ts +1 -0
@@ -1,121 +1,121 @@
1
- import { Db } from './index';
2
- import { EJSON } from 'bson';
3
- import { QuerySerializer } from './serializer/query';
4
- import { stringifyByEJSON } from './utils/utils';
5
- import { getType } from './utils/type';
6
- import { Validate } from './validate';
7
- import { Point } from './geo/point';
8
- export default class Aggregation {
9
- constructor(db, collectionName, rawPipeline) {
10
- this._stages = [];
11
- if (db && collectionName) {
12
- this._db = db;
13
- this._request = new Db.reqClass(this._db.config);
14
- this._collectionName = collectionName;
15
- if (rawPipeline && rawPipeline.length > 0) {
16
- rawPipeline.forEach((stage) => {
17
- Validate.isValidAggregation(stage);
18
- const stageName = Object.keys(stage)[0];
19
- this._pipe(stageName, stage[stageName], true);
20
- });
21
- }
22
- }
23
- }
24
- async end() {
25
- if (!this._collectionName || !this._db) {
26
- throw new Error('Aggregation pipeline cannot send request');
27
- }
28
- const result = await this._request.send('database.aggregateDocuments', {
29
- collectionName: this._collectionName,
30
- stages: this._stages
31
- });
32
- if (result && result.data && result.data.list) {
33
- return {
34
- requestId: result.requestId,
35
- data: result.data.list.map(EJSON.parse)
36
- };
37
- }
38
- return result;
39
- }
40
- unwrap() {
41
- return this._stages;
42
- }
43
- done() {
44
- return this._stages.map(({ stageKey, stageValue }) => {
45
- return {
46
- [stageKey]: JSON.parse(stageValue)
47
- };
48
- });
49
- }
50
- _pipe(stage, param, raw = false) {
51
- let transformParam = '';
52
- if (getType(param) === 'object') {
53
- transformParam = stringifyByEJSON(param);
54
- }
55
- else {
56
- transformParam = JSON.stringify(param);
57
- }
58
- this._stages.push({
59
- stageKey: raw ? stage : `$${stage}`,
60
- stageValue: transformParam
61
- });
62
- return this;
63
- }
64
- addFields(param) {
65
- return this._pipe('addFields', param);
66
- }
67
- bucket(param) {
68
- return this._pipe('bucket', param);
69
- }
70
- bucketAuto(param) {
71
- return this._pipe('bucketAuto', param);
72
- }
73
- count(param) {
74
- return this._pipe('count', param);
75
- }
76
- geoNear(param) {
77
- if (param.query) {
78
- param.query = QuerySerializer.encode(param.query);
79
- }
80
- if (param.distanceMultiplier && typeof (param.distanceMultiplier) === 'number') {
81
- param.distanceMultiplier = param.distanceMultiplier;
82
- }
83
- if (param.near) {
84
- param.near = new Point(param.near.longitude, param.near.latitude).toJSON();
85
- }
86
- return this._pipe('geoNear', param);
87
- }
88
- group(param) {
89
- return this._pipe('group', param);
90
- }
91
- limit(param) {
92
- return this._pipe('limit', param);
93
- }
94
- match(param) {
95
- return this._pipe('match', QuerySerializer.encode(param));
96
- }
97
- project(param) {
98
- return this._pipe('project', param);
99
- }
100
- lookup(param) {
101
- return this._pipe('lookup', param);
102
- }
103
- replaceRoot(param) {
104
- return this._pipe('replaceRoot', param);
105
- }
106
- sample(param) {
107
- return this._pipe('sample', param);
108
- }
109
- skip(param) {
110
- return this._pipe('skip', param);
111
- }
112
- sort(param) {
113
- return this._pipe('sort', param);
114
- }
115
- sortByCount(param) {
116
- return this._pipe('sortByCount', param);
117
- }
118
- unwind(param) {
119
- return this._pipe('unwind', param);
120
- }
121
- }
1
+ import { Db } from './index';
2
+ import { EJSON } from 'bson';
3
+ import { QuerySerializer } from './serializer/query';
4
+ import { stringifyByEJSON } from './utils/utils';
5
+ import { getType } from './utils/type';
6
+ import { Validate } from './validate';
7
+ import { Point } from './geo/point';
8
+ export default class Aggregation {
9
+ constructor(db, collectionName, rawPipeline) {
10
+ this._stages = [];
11
+ if (db && collectionName) {
12
+ this._db = db;
13
+ this._request = new Db.reqClass(this._db.config);
14
+ this._collectionName = collectionName;
15
+ if (rawPipeline && rawPipeline.length > 0) {
16
+ rawPipeline.forEach((stage) => {
17
+ Validate.isValidAggregation(stage);
18
+ const stageName = Object.keys(stage)[0];
19
+ this._pipe(stageName, stage[stageName], true);
20
+ });
21
+ }
22
+ }
23
+ }
24
+ async end() {
25
+ if (!this._collectionName || !this._db) {
26
+ throw new Error('Aggregation pipeline cannot send request');
27
+ }
28
+ const result = await this._request.send('database.aggregateDocuments', {
29
+ collectionName: this._collectionName,
30
+ stages: this._stages
31
+ });
32
+ if (result && result.data && result.data.list) {
33
+ return {
34
+ requestId: result.requestId,
35
+ data: result.data.list.map(EJSON.parse)
36
+ };
37
+ }
38
+ return result;
39
+ }
40
+ unwrap() {
41
+ return this._stages;
42
+ }
43
+ done() {
44
+ return this._stages.map(({ stageKey, stageValue }) => {
45
+ return {
46
+ [stageKey]: JSON.parse(stageValue)
47
+ };
48
+ });
49
+ }
50
+ _pipe(stage, param, raw = false) {
51
+ let transformParam = '';
52
+ if (getType(param) === 'object') {
53
+ transformParam = stringifyByEJSON(param);
54
+ }
55
+ else {
56
+ transformParam = JSON.stringify(param);
57
+ }
58
+ this._stages.push({
59
+ stageKey: raw ? stage : `$${stage}`,
60
+ stageValue: transformParam
61
+ });
62
+ return this;
63
+ }
64
+ addFields(param) {
65
+ return this._pipe('addFields', param);
66
+ }
67
+ bucket(param) {
68
+ return this._pipe('bucket', param);
69
+ }
70
+ bucketAuto(param) {
71
+ return this._pipe('bucketAuto', param);
72
+ }
73
+ count(param) {
74
+ return this._pipe('count', param);
75
+ }
76
+ geoNear(param) {
77
+ if (param.query) {
78
+ param.query = QuerySerializer.encode(param.query);
79
+ }
80
+ if (param.distanceMultiplier && typeof (param.distanceMultiplier) === 'number') {
81
+ param.distanceMultiplier = param.distanceMultiplier;
82
+ }
83
+ if (param.near) {
84
+ param.near = new Point(param.near.longitude, param.near.latitude).toJSON();
85
+ }
86
+ return this._pipe('geoNear', param);
87
+ }
88
+ group(param) {
89
+ return this._pipe('group', param);
90
+ }
91
+ limit(param) {
92
+ return this._pipe('limit', param);
93
+ }
94
+ match(param) {
95
+ return this._pipe('match', QuerySerializer.encode(param));
96
+ }
97
+ project(param) {
98
+ return this._pipe('project', param);
99
+ }
100
+ lookup(param) {
101
+ return this._pipe('lookup', param);
102
+ }
103
+ replaceRoot(param) {
104
+ return this._pipe('replaceRoot', param);
105
+ }
106
+ sample(param) {
107
+ return this._pipe('sample', param);
108
+ }
109
+ skip(param) {
110
+ return this._pipe('skip', param);
111
+ }
112
+ sort(param) {
113
+ return this._pipe('sort', param);
114
+ }
115
+ sortByCount(param) {
116
+ return this._pipe('sortByCount', param);
117
+ }
118
+ unwind(param) {
119
+ return this._pipe('unwind', param);
120
+ }
121
+ }
@@ -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,69 +1,69 @@
1
- import { DocumentReference } from './document';
2
- import { Query } from './query';
3
- import Aggregation from './aggregate';
4
- import { serialize } from './serializer/datatype';
5
- import { getReqOpts, stringifyByEJSON } from './utils/utils';
6
- import { Validate } from './validate';
7
- import { isArray } from './utils/type';
8
- export class CollectionReference extends Query {
9
- constructor(db, coll, apiOptions, transactionId) {
10
- super(db, coll, '', apiOptions, transactionId);
11
- if (transactionId) {
12
- this._transactionId = transactionId;
13
- }
14
- }
15
- get name() {
16
- return this._coll;
17
- }
18
- doc(docID) {
19
- if (typeof docID !== 'string' && typeof docID !== 'number') {
20
- throw new Error('docId必须为字符串或数字');
21
- }
22
- return new DocumentReference(this._db, this._coll, this._apiOptions, docID, this._transactionId);
23
- }
24
- async add(data) {
25
- let transformData = data;
26
- if (!isArray(data)) {
27
- transformData = [data];
28
- }
29
- transformData = transformData.map(item => {
30
- return stringifyByEJSON(serialize(item));
31
- });
32
- let params = {
33
- collectionName: this._coll,
34
- data: transformData
35
- };
36
- if (this._transactionId) {
37
- params.transactionId = this._transactionId;
38
- }
39
- const res = await this._request.send('database.insertDocument', params, getReqOpts(this._apiOptions));
40
- if (res.code) {
41
- return res;
42
- }
43
- if (!isArray(data)) {
44
- if (this._transactionId) {
45
- return {
46
- inserted: 1,
47
- ok: 1,
48
- id: res.data.insertedIds[0],
49
- requestId: res.requestId
50
- };
51
- }
52
- return {
53
- id: res.data.insertedIds[0],
54
- requestId: res.requestId
55
- };
56
- }
57
- return {
58
- ids: res.data.insertedIds,
59
- requestId: res.requestId
60
- };
61
- }
62
- aggregate(rawPipeline = []) {
63
- return new Aggregation(this._db, this._coll, (this._apiOptions.raw || false) ? rawPipeline : []);
64
- }
65
- options(apiOptions) {
66
- Validate.isValidOptions(apiOptions);
67
- return new CollectionReference(this._db, this._coll, apiOptions, this._transactionId);
68
- }
69
- }
1
+ import { DocumentReference } from './document';
2
+ import { Query } from './query';
3
+ import Aggregation from './aggregate';
4
+ import { serialize } from './serializer/datatype';
5
+ import { getReqOpts, stringifyByEJSON } from './utils/utils';
6
+ import { Validate } from './validate';
7
+ import { isArray } from './utils/type';
8
+ export class CollectionReference extends Query {
9
+ constructor(db, coll, apiOptions, transactionId) {
10
+ super(db, coll, '', apiOptions, transactionId);
11
+ if (transactionId) {
12
+ this._transactionId = transactionId;
13
+ }
14
+ }
15
+ get name() {
16
+ return this._coll;
17
+ }
18
+ doc(docID) {
19
+ if (typeof docID !== 'string' && typeof docID !== 'number') {
20
+ throw new Error('docId必须为字符串或数字');
21
+ }
22
+ return new DocumentReference(this._db, this._coll, this._apiOptions, docID, this._transactionId);
23
+ }
24
+ async add(data) {
25
+ let transformData = data;
26
+ if (!isArray(data)) {
27
+ transformData = [data];
28
+ }
29
+ transformData = transformData.map(item => {
30
+ return stringifyByEJSON(serialize(item));
31
+ });
32
+ let params = {
33
+ collectionName: this._coll,
34
+ data: transformData
35
+ };
36
+ if (this._transactionId) {
37
+ params.transactionId = this._transactionId;
38
+ }
39
+ const res = await this._request.send('database.insertDocument', params, getReqOpts(this._apiOptions));
40
+ if (res.code) {
41
+ return res;
42
+ }
43
+ if (!isArray(data)) {
44
+ if (this._transactionId) {
45
+ return {
46
+ inserted: 1,
47
+ ok: 1,
48
+ id: res.data.insertedIds[0],
49
+ requestId: res.requestId
50
+ };
51
+ }
52
+ return {
53
+ id: res.data.insertedIds[0],
54
+ requestId: res.requestId
55
+ };
56
+ }
57
+ return {
58
+ ids: res.data.insertedIds,
59
+ requestId: res.requestId
60
+ };
61
+ }
62
+ aggregate(rawPipeline = []) {
63
+ return new Aggregation(this._db, this._coll, (this._apiOptions.raw || false) ? rawPipeline : []);
64
+ }
65
+ options(apiOptions) {
66
+ Validate.isValidOptions(apiOptions);
67
+ return new CollectionReference(this._db, this._coll, apiOptions, this._transactionId);
68
+ }
69
+ }