O MongoClient mantém um pool de conexões, você abre uma conexão Db uma vez com o MongoClient e a reutiliza em seu aplicativo porque a configuração de uma nova conexão TCP é cara em termos de tempo e memória, é por isso que você reutiliza conexões. Além disso, uma nova conexão fará com que um novo Thread seja criado no MongoDB usando memória no Db também.
- observe que há uma condição de corrida no método connectToMongo. Você precisa sincronizar o acesso a esse método para garantir que no máximo uma instância do MongoClient seja criada.