Список запросов MongoEngine для объектов, свойства которых начинаются с префиксов, указанных в списке

Мне нужно запросить базу данных Mongo для элементы, имеющие определенное свойство, начинающееся с любого префикса в списке. Теперь у меня есть фрагмент кода, подобный этому :

query = mymodel(terms__term__in=query_terms)

, и он соответствует объектам, у которых есть элемент в списке «термины», у которого есть «термин» StringField, явно встречающийся в списке «терминов запроса _». Чего я хочу добиться, так это наличия объектов, у которых есть элемент в списке «термины», у которого есть «термин» StringField, начинающийся с любого префикса, который встречается в списке «термины запроса _». Можно ли сделать это в одном запросе и без сохранения всех возможных префиксов «терминов» в базе данных? РЕДАКТИРОВАТЬ :Решение ниже отлично работает, но теперь мне нужно найти объекты с терминами, начинающимися с каждого префикса в списке. Я изменил

query = reduce(lambda q1, q2: q1.__or__(q2), 
           map(lambda prefix: Q(terms__term__startswith=prefix)))

на

query = reduce(lambda q1, q2: q1.__and__(q2), 
           map(lambda prefix: Q(terms__term__startswith=prefix)))

, но это не работает. В итоге я получаю следующую ошибку:

InvalidQueryError: Duplicate query conditions: terms__term__startswith

Любые идеи?

6
задан Community 22 September 2017 в 18:01
поделиться