Mongoengine ... запросить что-то не в ListField? - PullRequest
8 голосов
/ 05 марта 2012

например ..

class Page(Document)
    tags = ListField(StringField())

В этом случае мы можем узнать значение в списке тегов следующим образом.

Page.objects(tags='coding')

если теги похожи на ['coding', 'x', 'y'], то документ будет соответствовать ...

но Мой вопрос в том, как узнать значение, отсутствующее в списке.

мой неверный код будет ..

Page.objects(tags!='coding') 

или

Page.objects(tags__not = 'coding')

или

Page.objects(tags__not__in = 'coding')

но .. они не просто работают ..

как запросить документ, который не имеет заданного значения в ListField?

Ответы [ 2 ]

16 голосов
/ 05 марта 2012

Чтобы найти страницы, на которых нет тегов, используйте оператор $ nin :

Page.objects(tags__nin=['coding'])
1 голос
/ 16 мая 2012

Я бы пропустил использование встроенного синтаксиса монго для этого и просто использовал бы необработанный запрос:

Page.objects(__raw__={"tags" : {"$ne" : ['coding']}})

Поскольку запрос усложняется, вы захотите настроить его следующим образом.

...