diff --git a/spec/GridFSBucketStorageAdapter.spec.js b/spec/GridFSBucketStorageAdapter.spec.js index 419bfdb98d8..01373234954 100644 --- a/spec/GridFSBucketStorageAdapter.spec.js +++ b/spec/GridFSBucketStorageAdapter.spec.js @@ -20,6 +20,26 @@ describe_only_db('mongo')('GridFSBucket', () => { await db.dropDatabase(); }); + it('should connect to mongo with the supported database options', async () => { + const databaseURI = 'mongodb://localhost:27017/parse'; + const gfsAdapter = new GridFSBucketAdapter(databaseURI, { + retryWrites: true, + // these are not supported by the mongo client + enableSchemaHooks: true, + schemaCacheTtl: 5000, + maxTimeMS: 30000, + }); + + const db = await gfsAdapter._connect(); + const status = await db.admin().serverStatus(); + + // connection will fail if unsupported keys are + // passed into the mongo connection options + expect(status.connections.current > 0).toEqual(true); + + expect(db.options?.retryWrites).toEqual(true); + }); + it('should save an encrypted file that can only be decrypted by a GridFS adapter with the encryptionKey', async () => { const unencryptedAdapter = new GridFSBucketAdapter(databaseURI); const encryptedAdapter = new GridFSBucketAdapter( diff --git a/src/Adapters/Files/GridFSBucketAdapter.js b/src/Adapters/Files/GridFSBucketAdapter.js index f2b9c48fadd..14a9544fc27 100644 --- a/src/Adapters/Files/GridFSBucketAdapter.js +++ b/src/Adapters/Files/GridFSBucketAdapter.js @@ -20,7 +20,7 @@ export class GridFSBucketAdapter extends FilesAdapter { constructor( mongoDatabaseURI = defaults.DefaultMongoURI, - mongoOptions = {}, + databaseOptions = {}, encryptionKey = undefined ) { super(); @@ -34,6 +34,10 @@ export class GridFSBucketAdapter extends FilesAdapter { useNewUrlParser: true, useUnifiedTopology: true, }; + const mongoOptions = { ...databaseOptions }; + for (const key of ['enableSchemaHooks', 'schemaCacheTtl', 'maxTimeMS']) { + delete mongoOptions[key]; + } this._mongoOptions = Object.assign(defaultMongoOptions, mongoOptions); }