Come suggerito da @Thilo, puoi utilizzare diverse idee, incluso il prefisso.
La cosa più importante è avere una richiesta molto veloce (perché vuoi che il completamento automatico senti istantaneo). Quindi devi usare query che utilizzerà correttamente gli indici.
Con regexp :usa /^prefix/
(l'importante è ^ per specificare l'inizio della riga che è obbligatorio per fare in modo che la query utilizzi l'indice).
Anche la query sull'intervallo è buona:{ $gt : 'jhc', $lt: 'jhd' } }
Più complicato ma più veloce:puoi memorizzare alberi di prefisso in mongo (ovvero try) con voci come:
{usrPrefix : "anna", compl : ["annaconda", "annabelle", "annather"]}
{usrPrefix : "ann", compl : ["anne", "annaconda", "annabelle", "annather"]}
Quest'ultima soluzione è molto veloce (se indici su compl ovviamente) ma non è affatto efficiente in termini di spazio. Conosci anche tu il compromesso che devi scegliere.