From 85d8d09713e2a80442dfbb38ecc887204306ba17 Mon Sep 17 00:00:00 2001 From: Neal Beeken Date: Tue, 12 Jan 2021 12:05:54 -0500 Subject: [PATCH] feat!: Options object precedence over URI options (#2691) --- src/connection_string.ts | 6 +++--- src/mongo_client.ts | 6 ++++++ test/unit/mongo_client_options.test.js | 4 ++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/connection_string.ts b/src/connection_string.ts index ed3ef06429..4c579f1622 100644 --- a/src/connection_string.ts +++ b/src/connection_string.ts @@ -344,12 +344,12 @@ export function parseOptions( for (const key of allKeys) { const values = []; - if (urlOptions.has(key)) { - values.push(...urlOptions.get(key)); - } if (objectOptions.has(key)) { values.push(objectOptions.get(key)); } + if (urlOptions.has(key)) { + values.push(...urlOptions.get(key)); + } if (DEFAULT_OPTIONS.has(key)) { values.push(DEFAULT_OPTIONS.get(key)); } diff --git a/src/mongo_client.ts b/src/mongo_client.ts index 4b961d0320..92937001ea 100644 --- a/src/mongo_client.ts +++ b/src/mongo_client.ts @@ -242,6 +242,9 @@ const kOptions = Symbol('options'); * The **MongoClient** class is a class that allows for making Connections to MongoDB. * @public * + * @remarks + * The programmatically provided options take precedent over the URI options. + * * @example * ```js * // Connect using a MongoClient instance @@ -439,6 +442,9 @@ export class MongoClient extends EventEmitter { /** * Connect to MongoDB using a url * + * @remarks + * The programmatically provided options take precedent over the URI options. + * * @see https://docs.mongodb.org/manual/reference/connection-string/ */ static connect(url: string): Promise; diff --git a/test/unit/mongo_client_options.test.js b/test/unit/mongo_client_options.test.js index 10116eefef..4be3b2f168 100644 --- a/test/unit/mongo_client_options.test.js +++ b/test/unit/mongo_client_options.test.js @@ -16,11 +16,11 @@ describe('MongoOptions', function () { expect(client.options).to.be.frozen; }); - it('test simple', function () { + it('programmatic options should override URI options', function () { const options = parseOptions('mongodb://localhost:27017/test?directConnection=true', { directConnection: false }); - expect(options.directConnection).to.be.true; + expect(options.directConnection).to.be.false; expect(options.hosts).has.length(1); expect(options.dbName).to.equal('test'); expect(options.prototype).to.not.exist;