Skip to content

Commit f0f1870

Browse files
greenkeeper[bot]flovilmart
authored andcommitted
Update mongodb to the latest version 🚀 (#4449)
* fix(package): update mongodb to version 3.0.0 * Compatibility with MongoDB client 3.0 * Updates Gridstore as well * Set Read preference to Primary when not specified, to match original implementation * Update MongoStorageAdapter.js * Bumps to 3.0.1
1 parent 6143988 commit f0f1870

File tree

3 files changed

+35
-26
lines changed

3 files changed

+35
-26
lines changed

‎package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
"lodash": "4.17.4",
3232
"lru-cache": "4.1.1",
3333
"mime": "2.1.0",
34-
"mongodb": "2.2.33",
34+
"mongodb": "3.0.1",
3535
"multer": "1.3.0",
3636
"parse": "1.11.0",
3737
"pg-promise": "7.3.2",

‎src/Adapters/Files/GridStoreAdapter.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,16 @@ export class GridStoreAdapter extends FilesAdapter {
2121

2222
_connect() {
2323
if (!this._connectionPromise) {
24-
this._connectionPromise = MongoClient.connect(this._databaseURI);
24+
this._connectionPromise = MongoClient.connect(this._databaseURI)
25+
.then((client) => client.db(client.s.options.dbName));
2526
}
2627
return this._connectionPromise;
2728
}
2829

2930
// For a given config object, filename, and data, store a file
3031
// Returns a promise
3132
createFile(filename: string, data) {
32-
return this._connect().then(database => {
33+
return this._connect().then((database) => {
3334
const gridStore = new GridStore(database, filename, 'w');
3435
return gridStore.open();
3536
}).then(gridStore => {

‎src/Adapters/Storage/Mongo/MongoStorageAdapter.js

+31-23
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,12 @@ export class MongoStorageAdapter {
117117
// encoded
118118
const encodedUri = formatUrl(parseUrl(this._uri));
119119

120-
this.connectionPromise = MongoClient.connect(encodedUri, this._mongoOptions).then(database => {
120+
this.connectionPromise = MongoClient.connect(encodedUri, this._mongoOptions).then(client => {
121+
// Starting mongoDB 3.0, the MongoClient.connect don't return a DB anymore but a client
122+
// Fortunately, we can get back the options and use them to select the proper DB.
123+
// https://github.com/mongodb/node-mongodb-native/blob/2c35d76f08574225b8db02d7bef687123e6bb018/lib/mongo_client.js#L885
124+
const options = client.s.options;
125+
const database = client.db(options.dbName);
121126
if (!database) {
122127
delete this.connectionPromise;
123128
return;
@@ -128,6 +133,7 @@ export class MongoStorageAdapter {
128133
database.on('close', () => {
129134
delete this.connectionPromise;
130135
});
136+
this.client = client;
131137
this.database = database;
132138
}).catch((err) => {
133139
delete this.connectionPromise;
@@ -138,10 +144,10 @@ export class MongoStorageAdapter {
138144
}
139145

140146
handleShutdown() {
141-
if (!this.database) {
147+
if (!this.client) {
142148
return;
143149
}
144-
this.database.close(false);
150+
this.client.close(false);
145151
}
146152

147153
_adaptiveCollection(name: string) {
@@ -516,26 +522,28 @@ export class MongoStorageAdapter {
516522
}
517523

518524
_parseReadPreference(readPreference) {
519-
if (readPreference) {
520-
switch (readPreference) {
521-
case 'PRIMARY':
522-
readPreference = ReadPreference.PRIMARY;
523-
break;
524-
case 'PRIMARY_PREFERRED':
525-
readPreference = ReadPreference.PRIMARY_PREFERRED;
526-
break;
527-
case 'SECONDARY':
528-
readPreference = ReadPreference.SECONDARY;
529-
break;
530-
case 'SECONDARY_PREFERRED':
531-
readPreference = ReadPreference.SECONDARY_PREFERRED;
532-
break;
533-
case 'NEAREST':
534-
readPreference = ReadPreference.NEAREST;
535-
break;
536-
default:
537-
throw new Parse.Error(Parse.Error.INVALID_QUERY, 'Not supported read preference.');
538-
}
525+
switch (readPreference) {
526+
case 'PRIMARY':
527+
readPreference = ReadPreference.PRIMARY;
528+
break;
529+
case 'PRIMARY_PREFERRED':
530+
readPreference = ReadPreference.PRIMARY_PREFERRED;
531+
break;
532+
case 'SECONDARY':
533+
readPreference = ReadPreference.SECONDARY;
534+
break;
535+
case 'SECONDARY_PREFERRED':
536+
readPreference = ReadPreference.SECONDARY_PREFERRED;
537+
break;
538+
case 'NEAREST':
539+
readPreference = ReadPreference.NEAREST;
540+
break;
541+
case undefined:
542+
// this is to match existing tests, which were failing as [email protected] don't report readPreference anymore
543+
readPreference = ReadPreference.PRIMARY;
544+
break;
545+
default:
546+
throw new Parse.Error(Parse.Error.INVALID_QUERY, 'Not supported read preference.');
539547
}
540548
return readPreference;
541549
}

0 commit comments

Comments
 (0)