Eu não recomendaria criar e gerenciar manualmente essas conexões separadas. Não conheço os detalhes de seus requisitos multilocatários (número de locatários, tamanho dos bancos de dados, número esperado de transações etc.), mas acho que seria melhor usar algo como função useDb do Mongoose . Então o Mongoose pode lidar com todos os detalhes do pool de conexões.
atualizar
A primeira direção que eu exploraria é configurar cada locatário em um processo de nó separado. Há alguns benefícios interessantes em executar seus locatários em processos de nós separados. Faz sentido do ponto de vista da segurança (memória isolada) e do ponto de vista da estabilidade (uma falha no processo do locatário não afeta os outros).
Supondo que você esteja baseando a locação na URL, você configuraria um servidor proxy na frente dos servidores locatários reais. Seu trabalho seria examinar a URL e encaminhar para o processo correto com base nessa informação. Este é um proxy http do nó muito simples configurar. Cada instância de locatário pode ser exatamente a mesma base de código, mas iniciada com uma configuração diferente (que informa qual string de conexão mongo usar).
Isso significa que você pode projetar seu aplicativo real como se não fosse multilocatário. Cada processo conhece apenas um banco de dados mongo e não há necessidade de lógica multilocatário. Ele também permite que você divida facilmente o tráfego posteriormente com base na carga. Se você precisar dividir os locatários por motivos de desempenho, poderá fazê-lo de forma transparente no nível do proxy. O DNS pode permanecer o mesmo, e você pode apenas mover o servidor em que as instâncias estão nos bastidores. Você pode até fazer com que o proxy balanceie as solicitações de um locatário entre vários servidores.