Vorrei effettuare una ricerca su una raccolta nel mio database mongodb. Nella mia collezione, ho i documenti con il campo "Nome" può essere valori come:MongoDB: come trovare i documenti che ignorano la distinzione tra maiuscole e minuscole, gli accenti e la percentuale come logica (%)
[i] "Palácio Guanabara", "Palácio da Cidade", "Festa Palácio", ecc
Quando un utente digita una ricerca come "pala" o "palá" o "Pala" o "PalÁ", tutti quelli itens in [i] devono creare il set di risultati.
ho scoperto che in MongoDB potrei usare espressioni regolari nelle ricerche, come:
{ "name": { $regex: new Regex(".*pala.*", "i") } }
Ok, questo approccio è case insensitive e utilizzare la percentuale come la logica da SQL ("% pala%"). Ma, non è da ignorare gli accenti dal registro nel database.
ho trovato un'altra alternativa con l'indice $ testo: https://docs.mongodb.org/manual/core/index-text/
Questo approccio può ignorare maiuscole e minuscole e accenti. Ma la "ricerca" non accetta una regex, quindi non posso cercare cose come "% pala%".
Riassumendo, voglio fare la seguente query SQL in MongoDB:
select * from collection where remove_accents(upper(name)) like '%Pala%'
E questa query restituire i risultati con nome come "Palácio", "palacio", "palacio", ecc
Come suggerito qui http: // StackOverflow.it/questions/7707671/mongodb-match-accentented-character-as-underlying-character la tua scommessa migliore è quella di creare un campo con una versione non accentata della tua stringa ricercabile. – joao
Grazie a @joao. Userò l'approccio Dmitriy e in futuro creerò questo file "ricercabile". –