diff --git a/packages/data-service/src/connect-mongo-client.spec.ts b/packages/data-service/src/connect-mongo-client.spec.ts index 70850676866..93e7b9a7041 100644 --- a/packages/data-service/src/connect-mongo-client.spec.ts +++ b/packages/data-service/src/connect-mongo-client.spec.ts @@ -73,6 +73,27 @@ describe('connectMongoClient', function () { }); }); + it('should not override a user-specified directConnection option', async function () { + const [client, tunnel, { url, options }] = await connectMongoClient( + { + connectionString: 'mongodb://localhost:27018/?directConnection=false', + }, + setupListeners, + tunnelLocalPort + ); + + toBeClosed.push(client, tunnel); + + assert.strictEqual( + url, + 'mongodb://localhost:27018/?directConnection=false' + ); + + assert.deepStrictEqual(options, { + monitorCommands: true, + }); + }); + it('should at least try to run a ping command to verify connectivity', async function () { try { await connectMongoClient( diff --git a/packages/data-service/src/connect-mongo-client.ts b/packages/data-service/src/connect-mongo-client.ts index d4de27f9940..051875ea8a9 100644 --- a/packages/data-service/src/connect-mongo-client.ts +++ b/packages/data-service/src/connect-mongo-client.ts @@ -116,8 +116,9 @@ function connectionOptionsToMongoClientParams( const isLoadBalanced = url.searchParams.get('loadBalanced') === 'true'; const isReplicaSet = url.isSRV || url.hosts.length > 1 || url.searchParams.has('replicaSet'); + const hasDirectConnection = url.searchParams.has('directConnection'); - if (!isReplicaSet && !isLoadBalanced) { + if (!isReplicaSet && !isLoadBalanced && !hasDirectConnection) { url.searchParams.set('directConnection', 'true'); }