@thisisagile/easy-mongo 8.46.3 → 9.4.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.
@@ -1,32 +1,31 @@
1
1
  import { Condition, Database, Field, Id, Json, JsonValue, List, LogicalCondition, SortCondition } from '@thisisagile/easy';
2
- import { Collection as MongoCollection, FilterQuery as MongoFilterQuery, MongoClient } from 'mongodb';
2
+ import { Collection as MongoCollection, Filter as MongoFilter, MongoClient } from 'mongodb';
3
3
  import { Collection } from './Collection';
4
4
  export declare type FindOptions = {
5
5
  limit?: number;
6
6
  skip?: number;
7
7
  sort?: SortCondition[];
8
8
  };
9
- export declare type FilterQuery<T> = MongoFilterQuery<T>;
9
+ export declare type Filter<T> = MongoFilter<T>;
10
10
  export declare class MongoProvider {
11
11
  readonly coll: Collection;
12
12
  private client?;
13
13
  constructor(coll: Collection, client?: Promise<MongoClient> | undefined);
14
+ static client(db: Database): Promise<MongoClient>;
14
15
  cluster(): Promise<MongoClient>;
15
- reconnect(client: MongoClient): Promise<MongoClient>;
16
- static connect(db: Database): Promise<MongoClient>;
17
- toMongoJson(query: Condition | LogicalCondition | FilterQuery<any>): Json;
18
- find(query: Condition | LogicalCondition | FilterQuery<any>, options?: FindOptions): Promise<List<Json>>;
16
+ toMongoJson(query: Condition | LogicalCondition | Filter<any>): Json;
17
+ find(query: Condition | LogicalCondition | Filter<any>, options?: FindOptions): Promise<List<Json>>;
19
18
  all(options?: FindOptions): Promise<List<Json>>;
20
19
  byId(id: Id): Promise<Json>;
21
20
  by(key: string, value: JsonValue, options?: FindOptions): Promise<List<Json>>;
22
- group(qs: FilterQuery<any>[]): Promise<Json[]>;
23
- aggregate: (qs: FilterQuery<any>[]) => Promise<Json[]>;
24
- add(o: Json): Promise<Json>;
21
+ group(qs: Filter<any>[]): Promise<Json[]>;
22
+ aggregate: (qs: Filter<any>[]) => Promise<Json[]>;
23
+ add(item: Json): Promise<Json>;
25
24
  update(item: Json): Promise<Json>;
26
25
  remove(id: Id): Promise<boolean>;
27
- count(query?: Condition | LogicalCondition | FilterQuery<any>): Promise<number>;
26
+ count(query?: Condition | LogicalCondition | Filter<any>): Promise<number>;
28
27
  createIndex(field: string | any, unique?: boolean): Promise<string>;
29
- createPartialIndex(field: string | any, filter: Condition | LogicalCondition | FilterQuery<any>, unique?: boolean): Promise<string>;
28
+ createPartialIndex(field: string | any, filter: Condition | LogicalCondition | Filter<any>, unique?: boolean): Promise<string>;
30
29
  createTextIndexes(...fields: Field[]): Promise<string>;
31
30
  collection(): Promise<MongoCollection>;
32
31
  }
@@ -15,27 +15,19 @@ class MongoProvider {
15
15
  this.client = client;
16
16
  this.aggregate = this.group;
17
17
  }
18
+ static client(db) {
19
+ return (0, easy_1.when)(db.options?.cluster)
20
+ .not.isDefined.reject(easy_1.Exception.IsNotValid.because('Missing cluster in database options.'))
21
+ .then(u => new mongodb_1.MongoClient(u, { auth: { username: (0, easy_1.asString)(db.options?.user), password: (0, easy_1.asString)(db.options?.password) } }));
22
+ }
18
23
  cluster() {
19
24
  return Promise.resolve()
20
- .then(() => this.client ?? (this.client = MongoProvider.connect(this.coll.db)))
25
+ .then(() => this.client ?? (this.client = MongoProvider.client(this.coll.db)))
21
26
  .catch(e => {
22
27
  this.client = undefined;
23
28
  return (0, easy_1.reject)(e);
24
29
  });
25
30
  }
26
- reconnect(client) {
27
- this.client = client.isConnected() ? Promise.resolve(client) : undefined;
28
- return this.cluster();
29
- }
30
- static connect(db) {
31
- return (0, easy_1.when)(db.options?.cluster)
32
- .not.isDefined.reject(new easy_1.Exception('Missing cluster in database options.'))
33
- .then(u => new mongodb_1.MongoClient(u, {
34
- useNewUrlParser: true,
35
- useUnifiedTopology: true,
36
- auth: { user: (0, easy_1.asString)(db.options?.user), password: (0, easy_1.asString)(db.options?.password) },
37
- }).connect());
38
- }
39
31
  toMongoJson(query) {
40
32
  return (0, Utils_1.toMongoType)((0, easy_1.asJson)(query));
41
33
  }
@@ -62,10 +54,10 @@ class MongoProvider {
62
54
  .then(c => c.aggregate(qs.map(q => this.toMongoJson(q))))
63
55
  .then(res => res.toArray());
64
56
  }
65
- add(o) {
57
+ add(item) {
66
58
  return this.collection()
67
- .then(c => c.insertOne(omitId(o)))
68
- .then(i => omitId(i.ops[0]));
59
+ .then(c => c.insertOne(omitId(item)))
60
+ .then(() => omitId(item));
69
61
  }
70
62
  update(item) {
71
63
  return this.collection()
@@ -75,7 +67,7 @@ class MongoProvider {
75
67
  remove(id) {
76
68
  return this.collection()
77
69
  .then(c => c.deleteOne(this.toMongoJson({ id })))
78
- .then(d => d.result.ok === 1);
70
+ .then(d => d.acknowledged);
79
71
  }
80
72
  count(query) {
81
73
  return this.collection().then(c => c.countDocuments(this.toMongoJson(query ?? {})));
@@ -92,7 +84,7 @@ class MongoProvider {
92
84
  }
93
85
  collection() {
94
86
  return this.cluster()
95
- .then(c => this.reconnect(c))
87
+ .then(c => c.connect())
96
88
  .then(c => c.db(this.coll.db.name))
97
89
  .then(db => db.collection((0, easy_1.asString)(this.coll)));
98
90
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MongoProvider.js","sourceRoot":"","sources":["../src/MongoProvider.ts"],"names":[],"mappings":";;;AAAA,4CAiB2B;AAC3B,qCAAsG;AAEtG,mCAAsC;AAEtC,MAAM,MAAM,GAAG,CAAC,CAAO,EAAQ,EAAE;IAC/B,IAAI,IAAA,gBAAS,EAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,GAAG,CAAC;IAC/B,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAUF,MAAa,aAAa;IACxB,YAAqB,IAAgB,EAAU,MAA6B;QAAvD,SAAI,GAAJ,IAAI,CAAY;QAAU,WAAM,GAAN,MAAM,CAAuB;QA4D5E,cAAS,GAAG,IAAI,CAAC,KAAK,CAAC;IA5DwD,CAAC;IAEhF,OAAO;QACL,OAAO,OAAO,CAAC,OAAO,EAAE;aACrB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;aAC9E,KAAK,CAAC,CAAC,CAAC,EAAE;YACT,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YACxB,OAAO,IAAA,aAAM,EAAC,CAAC,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,SAAS,CAAC,MAAmB;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,EAAY;QACzB,OAAO,IAAA,WAAI,EAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;aAC7B,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,gBAAS,CAAC,sCAAsC,CAAC,CAAC;aAC3E,IAAI,CAAC,CAAC,CAAC,EAAE,CACR,IAAI,qBAAW,CAAC,CAAC,EAAE;YACjB,eAAe,EAAE,IAAI;YACrB,kBAAkB,EAAE,IAAI;YACxB,IAAI,EAAE,EAAE,IAAI,EAAE,IAAA,eAAQ,EAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAA,eAAQ,EAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE;SACrF,CAAC,CAAC,OAAO,EAAE,CACb,CAAC;IACN,CAAC;IAED,WAAW,CAAC,KAAsD;QAChE,OAAO,IAAA,mBAAW,EAAC,IAAA,aAAM,EAAC,KAAK,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,CAAC,KAAsD,EAAE,UAAuB,EAAE,KAAK,EAAE,GAAG,EAAE;QAChG,OAAO,IAAI,CAAC,UAAU,EAAE;aACrB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAQ,EAAE,CAAC,CAAC;aAC7I,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;aAC1B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;aACpC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAA,aAAM,EAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,GAAG,CAAC,OAAqB;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,CAAC,EAAM;QACT,OAAO,IAAI,CAAC,UAAU,EAAE;aACrB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,IAAA,eAAQ,EAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;aAC5D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED,EAAE,CAAC,GAAW,EAAE,KAAgB,EAAE,OAAqB;QACrD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAA,eAAQ,EAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,EAAsB;QAC1B,OAAO,IAAI,CAAC,UAAU,EAAE;aACrB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACxD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAChC,CAAC;IAID,GAAG,CAAC,CAAO;QACT,OAAO,IAAI,CAAC,UAAU,EAAE;aACrB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;aACjC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,CAAC,IAAU;QACf,OAAO,IAAI,CAAC,UAAU,EAAE;aACrB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACjF,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAQ,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,CAAC,EAAM;QACX,OAAO,IAAI,CAAC,UAAU,EAAE;aACrB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;aAChD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,KAAuD;QAC3D,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,WAAW,CAAC,KAAmB,EAAE,MAAM,GAAG,IAAI;QAC5C,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/F,CAAC;IAED,kBAAkB,CAAC,KAAmB,EAAE,MAAuD,EAAE,MAAM,GAAG,IAAI;QAC5G,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,uBAAuB,EAAE,IAAA,mBAAW,EAAC,IAAA,aAAM,EAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACrJ,CAAC;IAED,iBAAiB,CAAC,GAAG,MAAe;QAClC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9E,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,EAAE;aAClB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;aAC5B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;aAClC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAA,eAAQ,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;CACF;AAxGD,sCAwGC"}
1
+ {"version":3,"file":"MongoProvider.js","sourceRoot":"","sources":["../src/MongoProvider.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thisisagile/easy-mongo",
3
- "version": "8.46.3",
3
+ "version": "9.4.0",
4
4
  "description": "Add support for MongoDB",
5
5
  "author": "Sander Hoogendoorn",
6
6
  "license": "MIT",
@@ -31,11 +31,10 @@
31
31
  "access": "public"
32
32
  },
33
33
  "devDependencies": {
34
- "@thisisagile/easy-test": "8.46.3"
34
+ "@thisisagile/easy-test": "9.4.0"
35
35
  },
36
36
  "dependencies": {
37
- "@thisisagile/easy": "8.46.3",
38
- "@types/mongodb": "^3.6.20",
39
- "mongodb": "^3.7.3"
37
+ "@thisisagile/easy": "9.4.0",
38
+ "mongodb": "^4.5.0"
40
39
  }
41
40
  }
@@ -16,7 +16,7 @@ import {
16
16
  toList,
17
17
  when,
18
18
  } from '@thisisagile/easy';
19
- import { Collection as MongoCollection, FilterQuery as MongoFilterQuery, MongoClient } from 'mongodb';
19
+ import { Collection as MongoCollection, Filter as MongoFilter, MongoClient } from 'mongodb';
20
20
  import { Collection } from './Collection';
21
21
  import { toMongoType } from './Utils';
22
22
 
@@ -31,42 +31,31 @@ export type FindOptions = {
31
31
  sort?: SortCondition[];
32
32
  };
33
33
 
34
- export type FilterQuery<T> = MongoFilterQuery<T>;
34
+ export type Filter<T> = MongoFilter<T>;
35
35
 
36
36
  export class MongoProvider {
37
37
  constructor(readonly coll: Collection, private client?: Promise<MongoClient>) {}
38
38
 
39
+ static client(db: Database): Promise<MongoClient> {
40
+ return when(db.options?.cluster)
41
+ .not.isDefined.reject(Exception.IsNotValid.because('Missing cluster in database options.'))
42
+ .then(u => new MongoClient(u, { auth: { username: asString(db.options?.user), password: asString(db.options?.password) } }));
43
+ }
44
+
39
45
  cluster(): Promise<MongoClient> {
40
46
  return Promise.resolve()
41
- .then(() => this.client ?? (this.client = MongoProvider.connect(this.coll.db)))
47
+ .then(() => this.client ?? (this.client = MongoProvider.client(this.coll.db)))
42
48
  .catch(e => {
43
49
  this.client = undefined;
44
50
  return reject(e);
45
51
  });
46
52
  }
47
53
 
48
- reconnect(client: MongoClient): Promise<MongoClient> {
49
- this.client = client.isConnected() ? Promise.resolve(client) : undefined;
50
- return this.cluster();
51
- }
52
-
53
- static connect(db: Database): Promise<MongoClient> {
54
- return when(db.options?.cluster)
55
- .not.isDefined.reject(new Exception('Missing cluster in database options.'))
56
- .then(u =>
57
- new MongoClient(u, {
58
- useNewUrlParser: true,
59
- useUnifiedTopology: true,
60
- auth: { user: asString(db.options?.user), password: asString(db.options?.password) },
61
- }).connect()
62
- );
63
- }
64
-
65
- toMongoJson(query: Condition | LogicalCondition | FilterQuery<any>): Json {
54
+ toMongoJson(query: Condition | LogicalCondition | Filter<any>): Json {
66
55
  return toMongoType(asJson(query));
67
56
  }
68
57
 
69
- find(query: Condition | LogicalCondition | FilterQuery<any>, options: FindOptions = { limit: 250 }): Promise<List<Json>> {
58
+ find(query: Condition | LogicalCondition | Filter<any>, options: FindOptions = { limit: 250 }): Promise<List<Json>> {
70
59
  return this.collection()
71
60
  .then(c => c.find(this.toMongoJson(query), { ...options, limit: options.limit ?? 250, sort: this.coll.sort(...(options.sort ?? [])) as any }))
72
61
  .then(res => res.toArray())
@@ -81,14 +70,14 @@ export class MongoProvider {
81
70
  byId(id: Id): Promise<Json> {
82
71
  return this.collection()
83
72
  .then(c => c.findOne(this.toMongoJson({ id: asString(id) })))
84
- .then(i => omitId(i));
73
+ .then(i => omitId(i as Json));
85
74
  }
86
75
 
87
76
  by(key: string, value: JsonValue, options?: FindOptions): Promise<List<Json>> {
88
77
  return this.find({ [key]: asString(value) }, options);
89
78
  }
90
79
 
91
- group(qs: FilterQuery<any>[]): Promise<Json[]> {
80
+ group(qs: Filter<any>[]): Promise<Json[]> {
92
81
  return this.collection()
93
82
  .then(c => c.aggregate(qs.map(q => this.toMongoJson(q))))
94
83
  .then(res => res.toArray());
@@ -96,10 +85,10 @@ export class MongoProvider {
96
85
 
97
86
  aggregate = this.group;
98
87
 
99
- add(o: Json): Promise<Json> {
88
+ add(item: Json): Promise<Json> {
100
89
  return this.collection()
101
- .then(c => c.insertOne(omitId(o)))
102
- .then(i => omitId(i.ops[0]));
90
+ .then(c => c.insertOne(omitId(item)))
91
+ .then(() => omitId(item));
103
92
  }
104
93
 
105
94
  update(item: Json): Promise<Json> {
@@ -111,10 +100,10 @@ export class MongoProvider {
111
100
  remove(id: Id): Promise<boolean> {
112
101
  return this.collection()
113
102
  .then(c => c.deleteOne(this.toMongoJson({ id })))
114
- .then(d => d.result.ok === 1);
103
+ .then(d => d.acknowledged);
115
104
  }
116
105
 
117
- count(query?: Condition | LogicalCondition | FilterQuery<any>): Promise<number> {
106
+ count(query?: Condition | LogicalCondition | Filter<any>): Promise<number> {
118
107
  return this.collection().then(c => c.countDocuments(this.toMongoJson(query ?? {})));
119
108
  }
120
109
 
@@ -122,7 +111,7 @@ export class MongoProvider {
122
111
  return this.collection().then(c => c.createIndex(field, { unique, writeConcern: { w: 1 } }));
123
112
  }
124
113
 
125
- createPartialIndex(field: string | any, filter: Condition | LogicalCondition | FilterQuery<any>, unique = true): Promise<string> {
114
+ createPartialIndex(field: string | any, filter: Condition | LogicalCondition | Filter<any>, unique = true): Promise<string> {
126
115
  return this.collection().then(c => c.createIndex(field, { partialFilterExpression: toMongoType(asJson(filter)), unique, writeConcern: { w: 1 } }));
127
116
  }
128
117
 
@@ -133,7 +122,7 @@ export class MongoProvider {
133
122
 
134
123
  collection(): Promise<MongoCollection> {
135
124
  return this.cluster()
136
- .then(c => this.reconnect(c))
125
+ .then(c => c.connect())
137
126
  .then(c => c.db(this.coll.db.name))
138
127
  .then(db => db.collection(asString(this.coll)));
139
128
  }