2016-07-08 4 views
0

У меня есть список различных строк.Соответствие Pymongo Regex со списком

lst = ['.\*123.\*','.\*252.\*','.\*812.\*','.\*135.\*'] 

Я хочу, чтобы выполнить операцию агрегирования таким образом, что мой $ матч выглядит следующим образом:

{"$match":{"Var":{"$in":lst}}} 

Поле вара в MongoDB записях является строкой, содержащей числа:
например «abc123», «haaofalfa812» и т. д. Я хочу, чтобы этот Var соответствовал регулярному выражению. Если переменные в LST были меньше, я мог бы сделать это ...

{"$match":{"Var":{"$in":[re.compile('.*123.*'),re.compile('.*252.*'),re.compile('.*812.*')]}}} 

Но так как это LST уже инициализирована и содержит много элементов, что я должен делать?

Я попытался следующие, но это не работает слишком ...

{"$match":{"Var":{"$in":[re.compile(x for x in lst)]}}} 

Я получаю следующее сообщение об ошибке по очевидным причинам.

TypeError: first argument must be string or compiled pattern

ответ

2

Ваш непонятный вид. Я считаю, что вы хотели бы сделать это:

[re.compile(x) for x in lst] 

Это TypeError приходит от попыток пройти генератор (x for x in lst заявление) в re.compile()

+0

Я не верю, я сделал, что маленькая ошибка! Спасибо чувак. – Blabber

Смежные вопросы