@@ -117,7 +117,12 @@ export class MongoStorageAdapter {
117
117
// encoded
118
118
const encodedUri = formatUrl ( parseUrl ( this . _uri ) ) ;
119
119
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 ) ;
121
126
if ( ! database ) {
122
127
delete this . connectionPromise ;
123
128
return ;
@@ -128,6 +133,7 @@ export class MongoStorageAdapter {
128
133
database . on ( 'close' , ( ) => {
129
134
delete this . connectionPromise ;
130
135
} ) ;
136
+ this . client = client ;
131
137
this . database = database ;
132
138
} ) . catch ( ( err ) => {
133
139
delete this . connectionPromise ;
@@ -138,10 +144,10 @@ export class MongoStorageAdapter {
138
144
}
139
145
140
146
handleShutdown ( ) {
141
- if ( ! this . database ) {
147
+ if ( ! this . client ) {
142
148
return ;
143
149
}
144
- this . database . close ( false ) ;
150
+ this . client . close ( false ) ;
145
151
}
146
152
147
153
_adaptiveCollection ( name : string ) {
@@ -516,26 +522,28 @@ export class MongoStorageAdapter {
516
522
}
517
523
518
524
_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.' ) ;
539
547
}
540
548
return readPreference ;
541
549
}
0 commit comments