@@ -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