{"id":"3840326523192585","repo":"mongodb/node-mongodb-native","slug":"cannot-limit-srv-hosts-with-loadbalanced-enabled","errorCode":null,"errorMessage":"Cannot limit srv hosts with loadBalanced enabled","messagePattern":"Cannot limit srv hosts with loadBalanced enabled","errorType":"exception","errorClass":"MongoParseError","httpStatus":null,"severity":"error","filePath":"src/connection_string.ts","lineNumber":581,"sourceCode":" */\nfunction validateLoadBalancedOptions(\n  hosts: HostAddress[] | string[],\n  mongoOptions: MongoOptions,\n  isSrv: boolean\n): void {\n  if (mongoOptions.loadBalanced) {\n    if (hosts.length > 1) {\n      throw new MongoParseError(LB_SINGLE_HOST_ERROR);\n    }\n    if (mongoOptions.replicaSet) {\n      throw new MongoParseError(LB_REPLICA_SET_ERROR);\n    }\n    if (mongoOptions.directConnection) {\n      throw new MongoParseError(LB_DIRECT_CONNECTION_ERROR);\n    }\n\n    if (isSrv && mongoOptions.srvMaxHosts > 0) {\n      throw new MongoParseError('Cannot limit srv hosts with loadBalanced enabled');\n    }\n  }\n  return;\n}\n\nfunction setOption(\n  mongoOptions: any,\n  key: string,\n  descriptor: OptionDescriptor,\n  values: unknown[]\n) {\n  const { target, type, transform } = descriptor;\n  const name = target ?? key;\n\n  switch (type) {\n    case 'boolean':\n      mongoOptions[name] = getBoolean(name, values[0]);\n      break;","sourceCodeStart":563,"sourceCodeEnd":599,"githubUrl":"https://github.com/mongodb/node-mongodb-native/blob/3366c21a6311e02f1be91da982f9b93d3cce99a0/src/connection_string.ts#L563-L599","documentation":"Thrown by validateLoadBalancedOptions (connection_string.ts:580-582) for an SRV URI when loadBalanced=true and srvMaxHosts > 0. loadBalanced requires connecting to all SRV-resolved endpoints behind the load balancer; limiting hosts via srvMaxHosts would break the LB topology assumption.","triggerScenarios":"URI like 'mongodb+srv://cluster.example/?loadBalanced=true&srvMaxHosts=2'.","commonSituations":"Adding srvMaxHosts to control fan-out on a load-balanced deployment; combining 'limit hosts' and 'load balanced' best-practice snippets.","solutions":["Set srvMaxHosts=0 (the default) when using loadBalanced.","Or remove loadBalanced if you want srvMaxHosts-based randomization.","Confirm your deployment is actually behind a load balancer before enabling loadBalanced."],"exampleFix":"// before\nconst c = new MongoClient('mongodb+srv://cluster.example/?loadBalanced=true&srvMaxHosts=2');\n// after\nconst c = new MongoClient('mongodb+srv://cluster.example/?loadBalanced=true');","handlingStrategy":"validation","validationCode":"const isSRV = uri.startsWith('mongodb+srv://');\nconst lb = new URL(uri).searchParams.get('loadBalanced') === 'true' || opts.loadBalanced === true;\nconst srvMaxHosts = Number(opts.srvMaxHosts ?? new URL(uri).searchParams.get('srvMaxHosts') ?? 0);\nif (isSRV && lb && srvMaxHosts > 0) throw new Error('loadBalanced requires srvMaxHosts=0');","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Avoid srvMaxHosts on load-balanced deployments.","Document the SRV + loadBalanced contract in your connection module."],"tags":["connection-string","load-balancing","srv","topology"],"analyzedSha":"3366c21a6311e02f1be91da982f9b93d3cce99a0","analyzedAt":"2026-08-04T13:40:15.335Z","schemaVersion":2}