Mongodb veritabanımda bir koleksiyon üzerinde arama yapmak istiyorum. koleksiyonuma, ben alanı "adıyla" ile belgeler var gibi değerler olabilir:MongoDB: büyük/küçük harfe duyarlı, aksan ve yüzde gibi mantığı yok eden belgeler nasıl bulunur (%)
[i] "Palácio Guanabara", "Palácio da Cidade", "Festa Palácio" vb
bir kullanıcı "pala" veya "palá" veya "Pala" veya "PalÁ" gibi bir arama yapar, sonuç kümesini oluşturmaları gerekir.
Ben MongoDB ben gibi aramalarda normal ifadeler kullanabilirsiniz bulmuşlardır:
{ "name": { $regex: new Regex(".*pala.*", "i") } }
Tamam, bu yaklaşım duyarsız olduğu ve SQL ("% pala%") den mantık gibi yüzde kullanın. Ancak, veritabanındaki kayıttan gelen aksini dikkate almaz. https://docs.mongodb.org/manual/core/index-text/
Bu yaklaşım harf duyarlı ve aksan yok sayabilirsiniz:
Ben $ metin dizini ile başka bir alternatif bulundu. Ancak "arama" bir normal ifadeyi kabul etmiyor, bu yüzden "% pala%" gibi şeyler arayamıyorum. vbselect * from collection where remove_accents(upper(name)) like '%Pala%'
Ve "Palacio", "palacio", "Palacio" gibi adıyla sonuçları döndürürken bu sorguyu,
Burada önerildiği gibi http: // stackoverflow.com/questions/7707671/mongodb-match-accented-character-as-underlying-character-olası-olası en iyi bahsiniz, aranabilir bir dizgenin kesintisiz bir versiyonunu içeren bir alan yaratmaktır. – joao
Teşekkürler @joao. Dmitriy yaklaşımını kullanacağım ve gelecekte bu dosyaya "aranabilir" oluşturacağım. –