Я пытаюсь выполнить запрос регулярного выражения с помощью pymongo на сервере mongodb. Структура документа следующая
{
"files": [
"File 1",
"File 2",
"File 3",
"File 4"
],
"rootFolder": "/Location/Of/Files"
}
Я хочу получить все файлы, соответствующие шаблону * File. Я пробовал делать это как таковой
db.collectionName.find({'files':'/^File/'})
Тем не менее, я ничего не получаю, я что-то упускаю, потому что, согласно документам mongodb, это должно быть возможно. Если я выполняю запрос в консоли mongo, он работает нормально, означает ли это, что api не поддерживает его, или я просто использую его неправильно
^
), могут использовать индексы в базе данных и в этом случае будут работать намного быстрее.Оказывается, поиск по регулярным выражениям в pymongo выполняется немного по-другому, но так же просто.
Регулярное выражение выполняется следующим образом:
Это будет соответствовать всем документам, у которых есть свойство files, в котором есть элемент, начинающийся с File
источник
$regex
. @ Ответ Эрика - это способ Python, который немного отличается.$regex
Оператор Монго принимает$options
аргумент.r'^File'
вместо,'^File'
чтобы избежать других проблемЧтобы избежать двойной компиляции, вы можете использовать оболочку регулярных выражений bson, которая поставляется с PyMongo:
Regex просто сохраняет строку, не пытаясь ее скомпилировать, поэтому find_one может затем определить аргумент как тип «Regex» и сформировать соответствующий запрос Mongo.
Мне кажется, этот способ немного более питонический, чем другой главный ответ, например:
Если вы планируете использовать запросы с регулярными выражениями, стоит прочитать документацию по bson Regex, поскольку есть некоторые предостережения.
источник
bson.regex.Regex
сделает свое дело!Решение
re
вообще не использует индекс. Вам следует использовать такие команды, как:db.collectionname.find({'files':{'$regex':'^File'}})
(Я не могу комментировать их ответы, поэтому отвечаю здесь)
источник