Vytváříte instanci třídy Mongo pro každou jednotlivou operaci. To nebude fungovat, protože každá instance vytvoří a podrží alespoň jedno připojení (ale ve výchozím nastavení 10) a tato připojení budou odstraněna pouze v případě, že Java GC vyčistí vaši instanci Mongo nebo když zavoláte close().
Problém je v tom, že v obou případech je vytváříte rychleji, než se zavírají, a to i pomocí jediného vlákna. Tím se vyčerpá maximální množství spojení ve spěchu. Správná oprava je ponechat jednu instanci Mongo pomocí vzoru singleton (Mongo.Holder pro to poskytuje funkci, zkuste Mongo.Holder.connect(..)). Rychlou „opravou“ je zvýšení limitu deskriptoru souboru na vašem počítači, takže maximální počet připojení je podstatně vyšší, ale samozřejmě můžete nakonec dosáhnout stejného limitu. Aktuální maximum můžete zkontrolovat pomocí (v shellu):
db.serverStatus().connections
TL;DR :Zacházejte s instancí Mongo jako s singletonem a udělejte jim co nejdelší životnost a jste zlatí. Implementace MongoFactory se statickou metodou getInstance(), která vrací líně vytvořenou instanci, bude stačit. Hodně štěstí.