Выполнение запросов регулярного выражения с помощью pymongo
Я пытаюсь выполнить запрос регулярного выражения, используя pymongo для сервера mongodb. Структура документа выглядит следующим образом
{
"files": [
"File 1",
"File 2",
"File 3",
"File 4"
],
"rootFolder": "/Location/Of/Files"
}
Я хочу получить все файлы, соответствующие шаблону * Файл. Я попытался сделать это как таковой
db.collectionName.find({'files':'/^File/'})
Но я ничего не получаю, я что-то пропустил, потому что, согласно документам mongodb, это должно быть возможно. Если я выполняю запрос в консоли mongo, он отлично работает, означает ли это, что api не поддерживает его или я просто неправильно его использую
Ответы
Ответ 1
Вызывается, поиск регулярных выражений выполняется несколько иначе в pymongo, но так же просто.
Regex выполняется следующим образом:
db.collectionname.find({'files':{'$regex':'^File'}})
Это будет соответствовать всем документам, у которых есть свойство файлов, в котором есть элемент, который начинается с файла
Ответ 2
Если вы хотите включить параметры регулярного выражения (например, игнорировать регистр), попробуйте следующее:
import re
regx = re.compile("^foo", re.IGNORECASE)
db.users.find_one({"files": regx})
Ответ 3
import re
def get_pattern_query(pattern,starting_with=False,ending_with=False,ignore_case=False):
start = '^' if starting_with else '.*'
end = '$' if ending_with else '.*'
pattern = start + re.escape(pattern) + end
return re.compile(pattern, re.IGNORECASE) if ignore_case else re.compile(pattern)
Удаление шаблона перед компиляцией обрабатывает все символы.