Dire che ho una raccolta di utenti e voglio implementare il completamento automatico sui nomi utente di quegli utenti. Ho guardato i documenti di mongodb e $ regex sembra essere un modo per farlo. C'è un modo migliore? Per meglio intendo più performante/pratica migliore.Implementare il completamento automatico su MongoDB
risposta
Come suggerito da @Thilo, è possibile utilizzare diverse idee tra cui il prefisso.
La cosa più importante è avere richiesta molto veloce (perché si vuole completare automaticamente a sentirsi instaneous). Quindi devi usare una query che userà correttamente gli indici.
Con regexp: utilizzare /^prefix/
(la cosa importante è la^per specificare l'inizio della riga che è obbligatorio per fare in modo che la query usi l'indice).
La query intervallo è troppo buono: { $gt : 'jhc', $lt: 'jhd' } }
più complicato, ma più veloce: è possibile memorizzare prefisso-alberi in Mongo (cerca aka) con voci come:
{usrPrefix : "anna", compl : ["annaconda", "annabelle", "annather"]}
{usrPrefix : "ann", compl : ["anne", "annaconda", "annabelle", "annather"]}
Quest'ultima soluzione è molto veloce (se gli indici su compl ovviamente) ma non lo spazio efficiente a tutti. Conoscete il trade-off che avete scelto troppo.
Se siete alla ricerca di prefissi, è possibile utilizzare una query di gamma (non sono sicuro circa l'esatta sintassi):
db.users.find({'username': { $gt : 'jhc', $lt: 'jhd' } })
E si desidera un indice sul campo nome utente.
Noi lo facciamo usando regex ed è veloce fino a quando si dispone di un indice e si utilizza/^ valore/
essere consapevoli non è possibile utilizzare il caso dell'opzione insensibile con un indice, quindi si consiglia di memorizzare una versione minuscola della stringa come un altro campo nel documento e utilizzarla per il completamento automatico.
Ho eseguito test con oltre 3 milioni di documenti e risulta ancora istantaneo.
- 1. ComboBox Completamento automatico su Sottostringa
- 2. completamento automatico Makefile su Mac
- 3. Ckeditor con completamento automatico?
- 4. Algoritmo per il completamento automatico?
- 5. Come implementare completamento automatico per l'indirizzo utilizzando Apple Map Kit
- 6. Completamento automatico NSTextField
- 7. Il selenio può gestire il completamento automatico?
- 8. Completamento automatico automatico in TextMate
- 9. Completamento automatico jQuery su evento selezionato
- 10. jQuery UI-completamento automatico e completamento automatico di Google Chrome
- 11. Come implementare la funzionalità di suggerimento automatico (completamento automatico) in GAE
- 12. Completamento automatico del codice su Eclipse
- 13. Eclipse: completamento automatico istantaneo
- 14. Come ottenere il completamento automatico di jQuery su pop-up?
- 15. Completamento automatico in CEDET?
- 16. Completamento automatico di Jquery e Gmail Completamento automatico
- 17. Funzione di completamento automatico iOS
- 18. Completamento Emacs: completamento automatico o azienda?
- 19. come implementare il completamento del codice in qt
- 20. jQuery completamento automatico con immagini
- 21. Completamento automatico dell'input HTML
- 22. Completamento automatico in Netbeans
- 23. Eclipse PDT Completamento automatico
- 24. PyCharm completamento automatico lento
- 25. Completamento automatico Postgresql?
- 26. Completamento automatico JComboBox
- 27. jQuery completamento automatico
- 28. Notepad ++: disabilita il completamento automatico nei commenti
- 29. jQuery completamento automatico immettere il problema chiave
- 30. Completamento automatico Xcode barrato?
Ottima risposta. Non avevo però completato con tentativi. Personalmente non ho mai avuto una sensazione "istantanea" nell'usare Regexes in Mongo. Questo dovrebbe fare il trucco per renderlo molto più veloce! – Vivek
In effetti, le regexp in mongo non sono davvero ben implementate. Tuttavia, quando vuoi qualcosa di fluido che non pensi di interrogare il database in tempo reale, la latenza è semplicemente troppo alta. Un modo corretto per implementare il completamento automatico consiste nel caricare in modo asincrono alcuni consueti completamenti e completare il tempo (e l'input dell'utente). – kamaradclimber