Фильтрация встроенного списка в MongoEngine - PullRequest
3 голосов
/ 10 сентября 2011

Если у меня есть эти модели:

class Sub(EmbeddedDocument):
    name = StringField()

class Main(Document):
    subs = ListField(EmbeddedDocumentField(Sub))

Я хочу получить запрос, который возвращает Mains, с подпрограммами, фильтруемыми по существующему имени

Main.objects.filter(subs__name__exists=True)

Возвращает правильные сети, но подчиненные всегда представляют собой весь список, а не подмножество. Как я могу получить только подмножество? Нужно ли полагаться на списки?

1 Ответ

2 голосов
/ 10 сентября 2011

MongoDB не поддерживает именно эту операцию, которую вы запрашиваете, и, следовательно, не поддерживает Mongoengine.

Вы можете выполнять операции срезов для массивов (списков), но не для специальной фильтрации.Нарезка в массивах MongoDB работает аналогично нарезке списков в Python, и вы можете сделать это с Mongoengine, используя синтаксис ключевого слова slice__:

Main.objects.filter(subs__name__exists=True).fields(slice__subs=[0,2])

Это вернет подпрограммы, начинающиеся с индекса 0 (то есть первый элемент) и возвращая после этого два элемента.

...