Mongoengine: сопоставить акцентированный символ на основе основного персонажа - PullRequest
0 голосов
/ 13 апреля 2020

Похожие: Как это сделать в синтаксисе MongoDB db.foo.find () .

Предположим, у меня есть модель

class Foo(Document):
    name = StringField()

и база данных состояние для коллекции:

[{"name":"Jesús"},{"name":"Jesus"}]

Я хочу запрос, который соответствует обоим документам, то есть поиск, но с нормализованными диакритическими знаками, что-то вроде:

Foo.objects.filter(name__icontains="jesus")

Есть ли способ сделать это прямо в mongoengine?

1 Ответ

0 голосов
/ 15 апреля 2020

С помощью python вы можете import unidecode, а затем сравнить все акценты с обычным текстом как,

from unidecode import unidecode
li = [ ]
for entry in Foo.objects:
    if unidecode(entry.name) == "Jesus":
        li.append(entry)

# now li has your filtered entries

В качестве альтернативы вы можете сделать

from unidecode import unidecode
li = [ entry for entry in Foo.objects if unidecode(entry.name) == "Jesus" ]

Примечание. Необходимо установить unidecode, используя pip install unidecode.

РЕДАКТИРОВАТЬ: Следующий код работает, как и ожидалось,

>>> unidecode('Jesús')
Jesus
...