@feathersjs/mongodb 5.0.0-pre.32 → 5.0.0-pre.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,12 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [5.0.0-pre.33](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.32...v5.0.0-pre.33) (2022-11-08)
7
+
8
+ ### Features
9
+
10
+ - **mongodb:** Add ObjectId resolvers and MongoDB option in the guide ([#2847](https://github.com/feathersjs/feathers/issues/2847)) ([c5c1fba](https://github.com/feathersjs/feathers/commit/c5c1fba5718a63412075cd3838b86b889eb0bd48))
11
+
6
12
  # [5.0.0-pre.32](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.31...v5.0.0-pre.32) (2022-10-26)
7
13
 
8
14
  **Note:** Version bump only for package @feathersjs/mongodb
package/lib/adapter.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { ObjectId, Collection, FindOptions, BulkWriteOptions, InsertOneOptions, DeleteOptions, CountDocumentsOptions, ReplaceOptions } from 'mongodb';
1
+ import { ObjectId, Collection, FindOptions, BulkWriteOptions, InsertOneOptions, DeleteOptions, CountDocumentsOptions, ReplaceOptions, Document } from 'mongodb';
2
2
  import { AdapterBase, AdapterParams, AdapterServiceOptions, PaginationOptions, AdapterQuery } from '@feathersjs/adapter-commons';
3
3
  import { NullableId, Id, Paginated } from '@feathersjs/feathers';
4
4
  export interface MongoDBAdapterOptions extends AdapterServiceOptions {
@@ -7,12 +7,13 @@ export interface MongoDBAdapterOptions extends AdapterServiceOptions {
7
7
  useEstimatedDocumentCount?: boolean;
8
8
  }
9
9
  export interface MongoDBAdapterParams<Q = AdapterQuery> extends AdapterParams<Q, Partial<MongoDBAdapterOptions>> {
10
+ pipeline?: Document[];
10
11
  mongodb?: BulkWriteOptions | FindOptions | InsertOneOptions | DeleteOptions | CountDocumentsOptions | ReplaceOptions;
11
12
  }
12
13
  export declare class MongoDbAdapter<T, D = Partial<T>, P extends MongoDBAdapterParams<any> = MongoDBAdapterParams> extends AdapterBase<T, D, P, MongoDBAdapterOptions> {
13
14
  constructor(options: MongoDBAdapterOptions);
14
15
  getObjectId(id: Id | ObjectId): Id | ObjectId;
15
- filterQuery(id: NullableId, params: P): {
16
+ filterQuery(id: NullableId | ObjectId, params: P): {
16
17
  filters: {
17
18
  $select: string[];
18
19
  $sort: {
@@ -25,14 +26,18 @@ export declare class MongoDbAdapter<T, D = Partial<T>, P extends MongoDBAdapterP
25
26
  [key: string]: any;
26
27
  };
27
28
  };
29
+ getModel(params: P): Promise<Collection<Document>>;
30
+ findRaw(params: P): Promise<import("mongodb").FindCursor<import("mongodb").WithId<Document>>>;
31
+ aggregateRaw(params: P): Promise<import("mongodb").AggregationCursor<Document>>;
32
+ makeFeathersPipeline(params: P): Document[];
28
33
  getSelect(select: string[] | {
29
34
  [key: string]: number;
30
35
  }): {
31
36
  [key: string]: number;
32
37
  };
33
- $findOrGet(id: NullableId, params: P): Promise<T | Paginated<T> | T[]>;
34
- normalizeId(id: NullableId, data: Partial<D>): Partial<D>;
35
- $get(id: Id, params?: P): Promise<T>;
38
+ $findOrGet(id: NullableId | ObjectId, params: P): Promise<T | Paginated<T> | T[]>;
39
+ normalizeId(id: NullableId | ObjectId, data: Partial<D>): Partial<D>;
40
+ $get(id: Id | ObjectId, params?: P): Promise<T>;
36
41
  $find(params?: P & {
37
42
  paginate?: PaginationOptions;
38
43
  }): Promise<Paginated<T>>;
@@ -45,9 +50,11 @@ export declare class MongoDbAdapter<T, D = Partial<T>, P extends MongoDBAdapterP
45
50
  $create(data: D | D[], _params?: P): Promise<T | T[]>;
46
51
  $patch(id: null, data: Partial<D>, params?: P): Promise<T[]>;
47
52
  $patch(id: Id, data: Partial<D>, params?: P): Promise<T>;
53
+ $patch(id: ObjectId, data: Partial<D>, params?: P): Promise<T>;
48
54
  $patch(id: NullableId, data: Partial<D>, _params?: P): Promise<T | T[]>;
49
- $update(id: Id, data: D, params?: P): Promise<T>;
55
+ $update(id: Id | ObjectId, data: D, params?: P): Promise<T>;
50
56
  $remove(id: null, params?: P): Promise<T[]>;
51
57
  $remove(id: Id, params?: P): Promise<T>;
58
+ $remove(id: ObjectId, params?: P): Promise<T>;
52
59
  $remove(id: NullableId, _params?: P): Promise<T | T[]>;
53
60
  }
package/lib/adapter.js CHANGED
@@ -41,6 +41,54 @@ class MongoDbAdapter extends adapter_commons_1.AdapterBase {
41
41
  query
42
42
  };
43
43
  }
44
+ getModel(params) {
45
+ const { Model } = this.getOptions(params);
46
+ return Promise.resolve(Model);
47
+ }
48
+ async findRaw(params) {
49
+ const { filters, query } = this.filterQuery(null, params);
50
+ const model = await this.getModel(params);
51
+ const q = model.find(query, { ...params.mongodb });
52
+ if (filters.$select !== undefined) {
53
+ q.project(this.getSelect(filters.$select));
54
+ }
55
+ if (filters.$sort !== undefined) {
56
+ q.sort(filters.$sort);
57
+ }
58
+ if (filters.$skip !== undefined) {
59
+ q.skip(filters.$skip);
60
+ }
61
+ if (filters.$limit !== undefined) {
62
+ q.limit(filters.$limit);
63
+ }
64
+ return q;
65
+ }
66
+ async aggregateRaw(params) {
67
+ const model = await this.getModel(params);
68
+ const pipeline = params.pipeline || [];
69
+ const index = pipeline.findIndex((stage) => stage.$feathers);
70
+ const before = index >= 0 ? pipeline.slice(0, index) : [];
71
+ const feathersPipeline = this.makeFeathersPipeline(params);
72
+ const after = index >= 0 ? pipeline.slice(index + 1) : pipeline;
73
+ return model.aggregate([...before, ...feathersPipeline, ...after]);
74
+ }
75
+ makeFeathersPipeline(params) {
76
+ const { filters, query } = this.filterQuery(null, params);
77
+ const pipeline = [{ $match: query }];
78
+ if (filters.$select !== undefined) {
79
+ pipeline.push({ $project: this.getSelect(filters.$select) });
80
+ }
81
+ if (filters.$sort !== undefined) {
82
+ pipeline.push({ $sort: filters.$sort });
83
+ }
84
+ if (filters.$skip !== undefined) {
85
+ pipeline.push({ $skip: filters.$skip });
86
+ }
87
+ if (filters.$limit !== undefined) {
88
+ pipeline.push({ $limit: filters.$limit });
89
+ }
90
+ return pipeline;
91
+ }
44
92
  getSelect(select) {
45
93
  if (Array.isArray(select)) {
46
94
  return select.reduce((value, name) => ({
@@ -70,7 +118,6 @@ class MongoDbAdapter extends adapter_commons_1.AdapterBase {
70
118
  return data;
71
119
  }
72
120
  async $get(id, params = {}) {
73
- const { Model } = this.getOptions(params);
74
121
  const { query, filters: { $select } } = this.filterQuery(id, params);
75
122
  const projection = $select
76
123
  ? {
@@ -84,7 +131,7 @@ class MongoDbAdapter extends adapter_commons_1.AdapterBase {
84
131
  ...params.mongodb,
85
132
  ...projection
86
133
  };
87
- return Promise.resolve(Model)
134
+ return this.getModel(params)
88
135
  .then((model) => model.findOne(query, findOptions))
89
136
  .then((data) => {
90
137
  if (data == null) {
@@ -95,41 +142,36 @@ class MongoDbAdapter extends adapter_commons_1.AdapterBase {
95
142
  .catch(error_handler_1.errorHandler);
96
143
  }
97
144
  async $find(params = {}) {
145
+ const { paginate, useEstimatedDocumentCount } = this.getOptions(params);
98
146
  const { filters, query } = this.filterQuery(null, params);
99
- const { paginate, Model, useEstimatedDocumentCount } = this.getOptions(params);
100
- const findOptions = { ...params.mongodb };
101
- const model = await Promise.resolve(Model);
102
- const q = model.find(query, findOptions);
103
- if (filters.$select !== undefined) {
104
- q.project(this.getSelect(filters.$select));
105
- }
106
- if (filters.$sort !== undefined) {
107
- q.sort(filters.$sort);
108
- }
109
- if (filters.$limit !== undefined) {
110
- q.limit(filters.$limit);
111
- }
112
- if (filters.$skip !== undefined) {
113
- q.skip(filters.$skip);
114
- }
115
- const runQuery = async (total) => ({
147
+ const useAggregation = !params.mongodb && filters.$limit !== 0;
148
+ const countDocuments = async () => {
149
+ if (paginate && paginate.default) {
150
+ const model = await this.getModel(params);
151
+ if (useEstimatedDocumentCount && typeof model.estimatedDocumentCount === 'function') {
152
+ return model.estimatedDocumentCount();
153
+ }
154
+ else {
155
+ return model.countDocuments(query, { ...params.mongodb });
156
+ }
157
+ }
158
+ return Promise.resolve(0);
159
+ };
160
+ const [request, total] = await Promise.all([
161
+ useAggregation ? this.aggregateRaw(params) : this.findRaw(params),
162
+ countDocuments()
163
+ ]);
164
+ const page = {
116
165
  total,
117
166
  limit: filters.$limit,
118
167
  skip: filters.$skip || 0,
119
- data: filters.$limit === 0 ? [] : (await q.toArray())
120
- });
121
- if (paginate && paginate.default) {
122
- if (useEstimatedDocumentCount && typeof model.estimatedDocumentCount === 'function') {
123
- return model.estimatedDocumentCount().then(runQuery);
124
- }
125
- return model.countDocuments(query, findOptions).then(runQuery);
126
- }
127
- return runQuery(0).then((page) => page.data);
168
+ data: filters.$limit === 0 ? [] : (await request.toArray())
169
+ };
170
+ return paginate && paginate.default ? page : page.data;
128
171
  }
129
172
  async $create(data, params = {}) {
130
173
  const writeOptions = params.mongodb;
131
- const { Model } = this.getOptions(params);
132
- const model = await Promise.resolve(Model);
174
+ const model = await this.getModel(params);
133
175
  const setId = (item) => {
134
176
  const entry = Object.assign({}, item);
135
177
  // Generate a MongoId if we use a custom id
@@ -152,8 +194,7 @@ class MongoDbAdapter extends adapter_commons_1.AdapterBase {
152
194
  }
153
195
  async $patch(id, _data, params = {}) {
154
196
  const data = this.normalizeId(id, _data);
155
- const { Model } = this.getOptions(params);
156
- const model = await Promise.resolve(Model);
197
+ const model = await this.getModel(params);
157
198
  const { query, filters: { $select } } = this.filterQuery(id, params);
158
199
  const updateOptions = { ...params.mongodb };
159
200
  const modifier = Object.keys(data).reduce((current, key) => {
@@ -191,16 +232,14 @@ class MongoDbAdapter extends adapter_commons_1.AdapterBase {
191
232
  return this.$findOrGet(id, findParams).catch(error_handler_1.errorHandler);
192
233
  }
193
234
  async $update(id, data, params = {}) {
194
- const { Model } = this.getOptions(params);
195
- const model = await Promise.resolve(Model);
235
+ const model = await this.getModel(params);
196
236
  const { query } = this.filterQuery(id, params);
197
237
  const replaceOptions = { ...params.mongodb };
198
238
  await model.replaceOne(query, this.normalizeId(id, data), replaceOptions);
199
239
  return this.$findOrGet(id, params).catch(error_handler_1.errorHandler);
200
240
  }
201
241
  async $remove(id, params = {}) {
202
- const { Model } = this.getOptions(params);
203
- const model = await Promise.resolve(Model);
242
+ const model = await this.getModel(params);
204
243
  const { query, filters: { $select } } = this.filterQuery(id, params);
205
244
  const deleteOptions = { ...params.mongodb };
206
245
  const findParams = {
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -1,8 +1,10 @@
1
1
  import { PaginationOptions } from '@feathersjs/adapter-commons';
2
2
  import { Paginated, ServiceMethods, Id, Params } from '@feathersjs/feathers';
3
+ import { ObjectId } from 'mongodb';
3
4
  import { MongoDbAdapter, MongoDBAdapterParams } from './adapter';
4
5
  export * from './adapter';
5
6
  export * from './error-handler';
7
+ export * from './resolvers';
6
8
  export declare class MongoDBService<T = any, D = Partial<T>, P extends Params<any> = MongoDBAdapterParams> extends MongoDbAdapter<T, D, P> implements ServiceMethods<T | Paginated<T>, D, P> {
7
9
  find(params?: P & {
8
10
  paginate?: PaginationOptions;
@@ -11,12 +13,16 @@ export declare class MongoDBService<T = any, D = Partial<T>, P extends Params<an
11
13
  paginate: false;
12
14
  }): Promise<T[]>;
13
15
  find(params?: P): Promise<Paginated<T> | T[]>;
16
+ get(id: ObjectId, params?: P): Promise<T>;
14
17
  get(id: Id, params?: P): Promise<T>;
15
18
  create(data: D, params?: P): Promise<T>;
16
19
  create(data: D[], params?: P): Promise<T[]>;
17
20
  update(id: Id, data: D, params?: P): Promise<T>;
21
+ update(id: ObjectId, data: D, params?: P): Promise<T>;
22
+ patch(id: ObjectId, data: Partial<D>, params?: P): Promise<T>;
18
23
  patch(id: Id, data: Partial<D>, params?: P): Promise<T>;
19
24
  patch(id: null, data: Partial<D>, params?: P): Promise<T[]>;
20
25
  remove(id: Id, params?: P): Promise<T>;
26
+ remove(id: ObjectId, params?: P): Promise<T>;
21
27
  remove(id: null, params?: P): Promise<T[]>;
22
28
  }
package/lib/index.js CHANGED
@@ -18,6 +18,7 @@ exports.MongoDBService = void 0;
18
18
  const adapter_1 = require("./adapter");
19
19
  __exportStar(require("./adapter"), exports);
20
20
  __exportStar(require("./error-handler"), exports);
21
+ __exportStar(require("./resolvers"), exports);
21
22
  class MongoDBService extends adapter_1.MongoDbAdapter {
22
23
  async find(params) {
23
24
  return this._find(params);
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAEA,uCAAgE;AAEhE,4CAAyB;AACzB,kDAA+B;AAE/B,MAAa,cACX,SAAQ,wBAAuB;IAM/B,KAAK,CAAC,IAAI,CAAC,MAAU;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAQ,CAAA;IAClC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAM,EAAE,MAAU;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;IAC9B,CAAC;IAID,KAAK,CAAC,MAAM,CAAC,IAAa,EAAE,MAAU;QACpC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACnC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAM,EAAE,IAAO,EAAE,MAAU;QACtC,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IACvC,CAAC;IAID,KAAK,CAAC,KAAK,CAAC,EAAc,EAAE,IAAgB,EAAE,MAAU;QACtD,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IACtC,CAAC;IAID,KAAK,CAAC,MAAM,CAAC,EAAc,EAAE,MAAU;QACrC,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;IACjC,CAAC;CACF;AApCD,wCAoCC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAGA,uCAAgE;AAEhE,4CAAyB;AACzB,kDAA+B;AAC/B,8CAA2B;AAE3B,MAAa,cACX,SAAQ,wBAAuB;IAM/B,KAAK,CAAC,IAAI,CAAC,MAAU;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAQ,CAAA;IAClC,CAAC;IAID,KAAK,CAAC,GAAG,CAAC,EAAiB,EAAE,MAAU;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAQ,EAAE,MAAM,CAAC,CAAA;IACpC,CAAC;IAID,KAAK,CAAC,MAAM,CAAC,IAAa,EAAE,MAAU;QACpC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACnC,CAAC;IAID,KAAK,CAAC,MAAM,CAAC,EAAiB,EAAE,IAAO,EAAE,MAAU;QACjD,OAAO,IAAI,CAAC,OAAO,CAAC,EAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IAC7C,CAAC;IAKD,KAAK,CAAC,KAAK,CAAC,EAAyB,EAAE,IAAgB,EAAE,MAAU;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,EAAgB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IACpD,CAAC;IAKD,KAAK,CAAC,MAAM,CAAC,EAAyB,EAAE,MAAU;QAChD,OAAO,IAAI,CAAC,OAAO,CAAC,EAAgB,EAAE,MAAM,CAAC,CAAA;IAC/C,CAAC;CACF;AA1CD,wCA0CC"}
@@ -0,0 +1,10 @@
1
+ import { ObjectId } from 'mongodb';
2
+ export declare type ObjectIdParam = string | number | ObjectId;
3
+ export declare type IdQueryObject<T> = {
4
+ $in?: T[];
5
+ $nin?: T[];
6
+ $ne?: T;
7
+ };
8
+ export declare function resolveObjectId(value: ObjectIdParam): Promise<ObjectId>;
9
+ export declare function resolveQueryObjectId(value: IdQueryObject<ObjectIdParam>): Promise<IdQueryObject<ObjectId>>;
10
+ export declare function resolveQueryObjectId(value: ObjectIdParam): Promise<ObjectId>;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveQueryObjectId = exports.resolveObjectId = void 0;
4
+ const mongodb_1 = require("mongodb");
5
+ const toObjectId = (value) => new mongodb_1.ObjectId(value);
6
+ async function resolveObjectId(value) {
7
+ return toObjectId(value);
8
+ }
9
+ exports.resolveObjectId = resolveObjectId;
10
+ async function resolveQueryObjectId(value) {
11
+ if (typeof value === 'string' || typeof value === 'number' || value instanceof mongodb_1.ObjectId) {
12
+ return toObjectId(value);
13
+ }
14
+ const convertedObject = {};
15
+ if (Array.isArray(value.$in)) {
16
+ convertedObject.$in = value.$in.map(toObjectId);
17
+ }
18
+ if (Array.isArray(value.$nin)) {
19
+ convertedObject.$nin = value.$nin.map(toObjectId);
20
+ }
21
+ if (value.$ne !== undefined) {
22
+ convertedObject.$ne = toObjectId(value.$ne);
23
+ }
24
+ return convertedObject;
25
+ }
26
+ exports.resolveQueryObjectId = resolveQueryObjectId;
27
+ //# sourceMappingURL=resolvers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolvers.js","sourceRoot":"","sources":["../src/resolvers.ts"],"names":[],"mappings":";;;AAAA,qCAAkC;AAUlC,MAAM,UAAU,GAAG,CAAC,KAAoB,EAAE,EAAE,CAAC,IAAI,kBAAQ,CAAC,KAAK,CAAC,CAAA;AAEzD,KAAK,UAAU,eAAe,CAAC,KAAoB;IACxD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAA;AAC1B,CAAC;AAFD,0CAEC;AAMM,KAAK,UAAU,oBAAoB,CAAC,KAAmD;IAC5F,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,YAAY,kBAAQ,EAAE;QACvF,OAAO,UAAU,CAAC,KAAK,CAAC,CAAA;KACzB;IAED,MAAM,eAAe,GAA4B,EAAE,CAAA;IAEnD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QAC5B,eAAe,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;KAChD;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;QAC7B,eAAe,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;KAClD;IAED,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;QAC3B,eAAe,CAAC,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;KAC5C;IAED,OAAO,eAAe,CAAA;AACxB,CAAC;AApBD,oDAoBC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@feathersjs/mongodb",
3
3
  "description": "Feathers MongoDB service adapter",
4
- "version": "5.0.0-pre.32",
4
+ "version": "5.0.0-pre.33",
5
5
  "homepage": "https://feathersjs.com",
6
6
  "main": "lib/",
7
7
  "keywords": [
@@ -51,22 +51,22 @@
51
51
  "access": "public"
52
52
  },
53
53
  "dependencies": {
54
- "@feathersjs/adapter-commons": "^5.0.0-pre.32",
55
- "@feathersjs/commons": "^5.0.0-pre.32",
56
- "@feathersjs/errors": "^5.0.0-pre.32",
57
- "@feathersjs/feathers": "^5.0.0-pre.32"
54
+ "@feathersjs/adapter-commons": "^5.0.0-pre.33",
55
+ "@feathersjs/commons": "^5.0.0-pre.33",
56
+ "@feathersjs/errors": "^5.0.0-pre.33",
57
+ "@feathersjs/feathers": "^5.0.0-pre.33"
58
58
  },
59
59
  "peerDependencies": {
60
60
  "mongodb": "^4.5.0"
61
61
  },
62
62
  "devDependencies": {
63
- "@feathersjs/adapter-tests": "^5.0.0-pre.32",
63
+ "@feathersjs/adapter-tests": "^5.0.0-pre.33",
64
64
  "@types/mocha": "^10.0.0",
65
- "@types/node": "^18.8.2",
66
- "mocha": "^10.0.0",
67
- "mongodb-memory-server": "^8.9.3",
65
+ "@types/node": "^18.11.9",
66
+ "mocha": "^10.1.0",
67
+ "mongodb-memory-server": "^8.9.5",
68
68
  "shx": "^0.3.4",
69
69
  "typescript": "^4.8.4"
70
70
  },
71
- "gitHead": "b405e205fc6d9fbd42b42c7a3f30ea4bf33d121d"
71
+ "gitHead": "89f516bcb1457e23a02c6212e9cd8bacc4d267d4"
72
72
  }
package/src/adapter.ts CHANGED
@@ -6,7 +6,8 @@ import {
6
6
  InsertOneOptions,
7
7
  DeleteOptions,
8
8
  CountDocumentsOptions,
9
- ReplaceOptions
9
+ ReplaceOptions,
10
+ Document
10
11
  } from 'mongodb'
11
12
  import { NotFound } from '@feathersjs/errors'
12
13
  import { _ } from '@feathersjs/commons'
@@ -29,6 +30,7 @@ export interface MongoDBAdapterOptions extends AdapterServiceOptions {
29
30
 
30
31
  export interface MongoDBAdapterParams<Q = AdapterQuery>
31
32
  extends AdapterParams<Q, Partial<MongoDBAdapterOptions>> {
33
+ pipeline?: Document[]
32
34
  mongodb?:
33
35
  | BulkWriteOptions
34
36
  | FindOptions
@@ -67,7 +69,7 @@ export class MongoDbAdapter<
67
69
  return id
68
70
  }
69
71
 
70
- filterQuery(id: NullableId, params: P) {
72
+ filterQuery(id: NullableId | ObjectId, params: P) {
71
73
  const { $select, $sort, $limit, $skip, ...query } = (params.query || {}) as AdapterQuery
72
74
 
73
75
  if (id !== null) {
@@ -86,6 +88,68 @@ export class MongoDbAdapter<
86
88
  }
87
89
  }
88
90
 
91
+ getModel(params: P) {
92
+ const { Model } = this.getOptions(params)
93
+ return Promise.resolve(Model)
94
+ }
95
+
96
+ async findRaw(params: P) {
97
+ const { filters, query } = this.filterQuery(null, params)
98
+ const model = await this.getModel(params)
99
+ const q = model.find(query, { ...params.mongodb })
100
+
101
+ if (filters.$select !== undefined) {
102
+ q.project(this.getSelect(filters.$select))
103
+ }
104
+
105
+ if (filters.$sort !== undefined) {
106
+ q.sort(filters.$sort)
107
+ }
108
+
109
+ if (filters.$skip !== undefined) {
110
+ q.skip(filters.$skip)
111
+ }
112
+
113
+ if (filters.$limit !== undefined) {
114
+ q.limit(filters.$limit)
115
+ }
116
+
117
+ return q
118
+ }
119
+
120
+ async aggregateRaw(params: P) {
121
+ const model = await this.getModel(params)
122
+ const pipeline = params.pipeline || []
123
+ const index = pipeline.findIndex((stage: Document) => stage.$feathers)
124
+ const before = index >= 0 ? pipeline.slice(0, index) : []
125
+ const feathersPipeline = this.makeFeathersPipeline(params)
126
+ const after = index >= 0 ? pipeline.slice(index + 1) : pipeline
127
+
128
+ return model.aggregate([...before, ...feathersPipeline, ...after])
129
+ }
130
+
131
+ makeFeathersPipeline(params: P) {
132
+ const { filters, query } = this.filterQuery(null, params)
133
+ const pipeline: Document[] = [{ $match: query }]
134
+
135
+ if (filters.$select !== undefined) {
136
+ pipeline.push({ $project: this.getSelect(filters.$select) })
137
+ }
138
+
139
+ if (filters.$sort !== undefined) {
140
+ pipeline.push({ $sort: filters.$sort })
141
+ }
142
+
143
+ if (filters.$skip !== undefined) {
144
+ pipeline.push({ $skip: filters.$skip })
145
+ }
146
+
147
+ if (filters.$limit !== undefined) {
148
+ pipeline.push({ $limit: filters.$limit })
149
+ }
150
+ return pipeline
151
+ }
152
+
89
153
  getSelect(select: string[] | { [key: string]: number }) {
90
154
  if (Array.isArray(select)) {
91
155
  return select.reduce<{ [key: string]: number }>(
@@ -100,11 +164,11 @@ export class MongoDbAdapter<
100
164
  return select
101
165
  }
102
166
 
103
- async $findOrGet(id: NullableId, params: P) {
167
+ async $findOrGet(id: NullableId | ObjectId, params: P) {
104
168
  return id === null ? await this.$find(params) : await this.$get(id, params)
105
169
  }
106
170
 
107
- normalizeId(id: NullableId, data: Partial<D>): Partial<D> {
171
+ normalizeId(id: NullableId | ObjectId, data: Partial<D>): Partial<D> {
108
172
  if (this.id === '_id') {
109
173
  // Default Mongo IDs cannot be updated. The Mongo library handles
110
174
  // this automatically.
@@ -120,8 +184,7 @@ export class MongoDbAdapter<
120
184
  return data
121
185
  }
122
186
 
123
- async $get(id: Id, params: P = {} as P): Promise<T> {
124
- const { Model } = this.getOptions(params)
187
+ async $get(id: Id | ObjectId, params: P = {} as P): Promise<T> {
125
188
  const {
126
189
  query,
127
190
  filters: { $select }
@@ -139,7 +202,7 @@ export class MongoDbAdapter<
139
202
  ...projection
140
203
  }
141
204
 
142
- return Promise.resolve(Model)
205
+ return this.getModel(params)
143
206
  .then((model) => model.findOne(query, findOptions))
144
207
  .then((data) => {
145
208
  if (data == null) {
@@ -155,44 +218,35 @@ export class MongoDbAdapter<
155
218
  async $find(params?: P & { paginate: false }): Promise<T[]>
156
219
  async $find(params?: P): Promise<Paginated<T> | T[]>
157
220
  async $find(params: P = {} as P): Promise<Paginated<T> | T[]> {
221
+ const { paginate, useEstimatedDocumentCount } = this.getOptions(params)
158
222
  const { filters, query } = this.filterQuery(null, params)
159
- const { paginate, Model, useEstimatedDocumentCount } = this.getOptions(params)
160
- const findOptions = { ...params.mongodb }
161
- const model = await Promise.resolve(Model)
162
- const q = model.find(query, findOptions)
163
-
164
- if (filters.$select !== undefined) {
165
- q.project(this.getSelect(filters.$select))
166
- }
167
-
168
- if (filters.$sort !== undefined) {
169
- q.sort(filters.$sort)
170
- }
171
-
172
- if (filters.$limit !== undefined) {
173
- q.limit(filters.$limit)
223
+ const useAggregation = !params.mongodb && filters.$limit !== 0
224
+
225
+ const countDocuments = async () => {
226
+ if (paginate && paginate.default) {
227
+ const model = await this.getModel(params)
228
+ if (useEstimatedDocumentCount && typeof model.estimatedDocumentCount === 'function') {
229
+ return model.estimatedDocumentCount()
230
+ } else {
231
+ return model.countDocuments(query, { ...params.mongodb })
232
+ }
233
+ }
234
+ return Promise.resolve(0)
174
235
  }
175
236
 
176
- if (filters.$skip !== undefined) {
177
- q.skip(filters.$skip)
178
- }
237
+ const [request, total] = await Promise.all([
238
+ useAggregation ? this.aggregateRaw(params) : this.findRaw(params),
239
+ countDocuments()
240
+ ])
179
241
 
180
- const runQuery = async (total: number) => ({
242
+ const page = {
181
243
  total,
182
244
  limit: filters.$limit,
183
245
  skip: filters.$skip || 0,
184
- data: filters.$limit === 0 ? [] : ((await q.toArray()) as any as T[])
185
- })
186
-
187
- if (paginate && paginate.default) {
188
- if (useEstimatedDocumentCount && typeof model.estimatedDocumentCount === 'function') {
189
- return model.estimatedDocumentCount().then(runQuery)
190
- }
191
-
192
- return model.countDocuments(query, findOptions).then(runQuery)
246
+ data: filters.$limit === 0 ? [] : ((await request.toArray()) as any as T[])
193
247
  }
194
248
 
195
- return runQuery(0).then((page) => page.data)
249
+ return paginate && paginate.default ? page : page.data
196
250
  }
197
251
 
198
252
  async $create(data: D, params?: P): Promise<T>
@@ -200,8 +254,7 @@ export class MongoDbAdapter<
200
254
  async $create(data: D | D[], _params?: P): Promise<T | T[]>
201
255
  async $create(data: D | D[], params: P = {} as P): Promise<T | T[]> {
202
256
  const writeOptions = params.mongodb
203
- const { Model } = this.getOptions(params)
204
- const model = await Promise.resolve(Model)
257
+ const model = await this.getModel(params)
205
258
  const setId = (item: any) => {
206
259
  const entry = Object.assign({}, item)
207
260
 
@@ -233,11 +286,11 @@ export class MongoDbAdapter<
233
286
 
234
287
  async $patch(id: null, data: Partial<D>, params?: P): Promise<T[]>
235
288
  async $patch(id: Id, data: Partial<D>, params?: P): Promise<T>
289
+ async $patch(id: ObjectId, data: Partial<D>, params?: P): Promise<T>
236
290
  async $patch(id: NullableId, data: Partial<D>, _params?: P): Promise<T | T[]>
237
- async $patch(id: NullableId, _data: Partial<D>, params: P = {} as P): Promise<T | T[]> {
291
+ async $patch(id: NullableId | ObjectId, _data: Partial<D>, params: P = {} as P): Promise<T | T[]> {
238
292
  const data = this.normalizeId(id, _data)
239
- const { Model } = this.getOptions(params)
240
- const model = await Promise.resolve(Model)
293
+ const model = await this.getModel(params)
241
294
  const {
242
295
  query,
243
296
  filters: { $select }
@@ -281,9 +334,8 @@ export class MongoDbAdapter<
281
334
  return this.$findOrGet(id, findParams).catch(errorHandler)
282
335
  }
283
336
 
284
- async $update(id: Id, data: D, params: P = {} as P): Promise<T> {
285
- const { Model } = this.getOptions(params)
286
- const model = await Promise.resolve(Model)
337
+ async $update(id: Id | ObjectId, data: D, params: P = {} as P): Promise<T> {
338
+ const model = await this.getModel(params)
287
339
  const { query } = this.filterQuery(id, params)
288
340
  const replaceOptions = { ...params.mongodb }
289
341
 
@@ -294,10 +346,10 @@ export class MongoDbAdapter<
294
346
 
295
347
  async $remove(id: null, params?: P): Promise<T[]>
296
348
  async $remove(id: Id, params?: P): Promise<T>
349
+ async $remove(id: ObjectId, params?: P): Promise<T>
297
350
  async $remove(id: NullableId, _params?: P): Promise<T | T[]>
298
- async $remove(id: NullableId, params: P = {} as P): Promise<T | T[]> {
299
- const { Model } = this.getOptions(params)
300
- const model = await Promise.resolve(Model)
351
+ async $remove(id: NullableId | ObjectId, params: P = {} as P): Promise<T | T[]> {
352
+ const model = await this.getModel(params)
301
353
  const {
302
354
  query,
303
355
  filters: { $select }
package/src/index.ts CHANGED
@@ -1,9 +1,11 @@
1
1
  import { PaginationOptions } from '@feathersjs/adapter-commons'
2
2
  import { Paginated, ServiceMethods, Id, NullableId, Params } from '@feathersjs/feathers'
3
+ import { ObjectId } from 'mongodb'
3
4
  import { MongoDbAdapter, MongoDBAdapterParams } from './adapter'
4
5
 
5
6
  export * from './adapter'
6
7
  export * from './error-handler'
8
+ export * from './resolvers'
7
9
 
8
10
  export class MongoDBService<T = any, D = Partial<T>, P extends Params<any> = MongoDBAdapterParams>
9
11
  extends MongoDbAdapter<T, D, P>
@@ -16,8 +18,10 @@ export class MongoDBService<T = any, D = Partial<T>, P extends Params<any> = Mon
16
18
  return this._find(params) as any
17
19
  }
18
20
 
19
- async get(id: Id, params?: P): Promise<T> {
20
- return this._get(id, params)
21
+ async get(id: ObjectId, params?: P): Promise<T>
22
+ async get(id: Id, params?: P): Promise<T>
23
+ async get(id: Id | ObjectId, params?: P): Promise<T> {
24
+ return this._get(id as Id, params)
21
25
  }
22
26
 
23
27
  async create(data: D, params?: P): Promise<T>
@@ -26,19 +30,23 @@ export class MongoDBService<T = any, D = Partial<T>, P extends Params<any> = Mon
26
30
  return this._create(data, params)
27
31
  }
28
32
 
29
- async update(id: Id, data: D, params?: P): Promise<T> {
30
- return this._update(id, data, params)
33
+ async update(id: Id, data: D, params?: P): Promise<T>
34
+ async update(id: ObjectId, data: D, params?: P): Promise<T>
35
+ async update(id: Id | ObjectId, data: D, params?: P): Promise<T> {
36
+ return this._update(id as Id, data, params)
31
37
  }
32
38
 
39
+ async patch(id: ObjectId, data: Partial<D>, params?: P): Promise<T>
33
40
  async patch(id: Id, data: Partial<D>, params?: P): Promise<T>
34
41
  async patch(id: null, data: Partial<D>, params?: P): Promise<T[]>
35
- async patch(id: NullableId, data: Partial<D>, params?: P): Promise<T | T[]> {
36
- return this._patch(id, data, params)
42
+ async patch(id: NullableId | ObjectId, data: Partial<D>, params?: P): Promise<T | T[]> {
43
+ return this._patch(id as NullableId, data, params)
37
44
  }
38
45
 
39
46
  async remove(id: Id, params?: P): Promise<T>
47
+ async remove(id: ObjectId, params?: P): Promise<T>
40
48
  async remove(id: null, params?: P): Promise<T[]>
41
- async remove(id: NullableId, params?: P): Promise<T | T[]> {
42
- return this._remove(id, params)
49
+ async remove(id: NullableId | ObjectId, params?: P): Promise<T | T[]> {
50
+ return this._remove(id as NullableId, params)
43
51
  }
44
52
  }
@@ -0,0 +1,41 @@
1
+ import { ObjectId } from 'mongodb'
2
+
3
+ export type ObjectIdParam = string | number | ObjectId
4
+
5
+ export type IdQueryObject<T> = {
6
+ $in?: T[]
7
+ $nin?: T[]
8
+ $ne?: T
9
+ }
10
+
11
+ const toObjectId = (value: ObjectIdParam) => new ObjectId(value)
12
+
13
+ export async function resolveObjectId(value: ObjectIdParam) {
14
+ return toObjectId(value)
15
+ }
16
+
17
+ export async function resolveQueryObjectId(
18
+ value: IdQueryObject<ObjectIdParam>
19
+ ): Promise<IdQueryObject<ObjectId>>
20
+ export async function resolveQueryObjectId(value: ObjectIdParam): Promise<ObjectId>
21
+ export async function resolveQueryObjectId(value: ObjectIdParam | IdQueryObject<ObjectIdParam>) {
22
+ if (typeof value === 'string' || typeof value === 'number' || value instanceof ObjectId) {
23
+ return toObjectId(value)
24
+ }
25
+
26
+ const convertedObject: IdQueryObject<ObjectId> = {}
27
+
28
+ if (Array.isArray(value.$in)) {
29
+ convertedObject.$in = value.$in.map(toObjectId)
30
+ }
31
+
32
+ if (Array.isArray(value.$nin)) {
33
+ convertedObject.$nin = value.$nin.map(toObjectId)
34
+ }
35
+
36
+ if (value.$ne !== undefined) {
37
+ convertedObject.$ne = toObjectId(value.$ne)
38
+ }
39
+
40
+ return convertedObject
41
+ }