Mongoengine найти документ без поля - PullRequest
0 голосов
/ 04 июля 2019

Мне нужно найти документ в коллекции Chat, в котором нет поля deal. Согласно документации exists проверяет, существует ли поле, а first используется для получения первого результата, но следующей строки

Chat.objects.first(deal__exists=False)

поднимает TypeError: first() got an unexpected keyword argument 'deal__exists'

Это Chat схема

class Chat(Document):
    id = IntField(primary_key=True)
    name = StringField(default=CHANNEL_NAME)
    invite_link = StringField(default=None)
    deal = ReferenceField("Deal", default=None)

и текущее состояние единственного документа в коллекции:

{
    "_id" : XXXXXXXXX,
    "name" : "XXXXX",
    "invite_link" : "https://t.me/joinchat/XXXXXXXXXXXXXXXXXXXXXX"
}

Значение none для deal дает тот же результат

Ответы [ 2 ]

2 голосов
/ 04 июля 2019

Вы можете попробовать:

Chat.objects.get(deal__exists=False)

или

Chat.objects(deal__exists=False)[0]

чтобы найти первый результат.

0 голосов
/ 04 июля 2019

Мне понадобилось время.

Прежде всего, метод first должен применяться к результату Chat.objects(deal=None).Точно так же как Chat.objects(deal=None).first().

И это не должно использоваться в операторе with, так как оно вызывает AttributeError: __enter__. Здесь более подробно об ошибке

...