为什么MongoEngine中的exclude()不排除所有字段?

2024-04-20 15:47:19 发布

您现在位置:Python中文网/ 问答频道 /正文

作为MongoEngine says in documentation:

only(*fields) Load only a subset of this document’s fields.

post = BlogPost.objects(...).only('title', 'author.name')

现在,我在自己的用户集合上运行相同的操作,如下所示:

user = User.objects(__raw__=condition).only('status').get()

但是当我打印输出(print user.to_json())时,会得到如下结果:

^{pr2}$

我想我没错过什么。在

现在我使用exclude将一些字段列入黑名单:

user = User.objects(__raw__=condition).exclude('status').exclude('username').exclude('bio').exclude('email').get()

输出为:

{"_id": {"$oid": "59ba3c7428999b08223dc4aa"}, "fullname": "Mu Fullname", "password": "$pbkdf2-sha256$16366$y9lbq/Ueo5QSohSi1FrLmQ$YOLu.KzmLiDhS6BVh4cTPg7xFpYLZ/2l478jnROj0ok", "cover": "", "avatar": "", "dob": {"$date": 1505347200000}, "created_at": {"$date": 1505377384359}, "updated_at": {"$date": 1505377384359}, "bio": "", "location": "", "verification": {"email": false, "celebrity": false, "phone": false}, "account_type": "regular", "status": "inactive", "phone": ""}

排除username和{},但不排除status和{}。在

我的用户模型是:

class Verification(EmbeddedDocument):
    email = BooleanField(default=False, allow_blank=True, allow_null=True)
    celebrity = BooleanField(default=False, allow_blank=True, allow_null=True)
    phone = BooleanField(default=False, allow_blank=True, allow_null=True)


class User(Document):
    email = EmailField(required=True, max_length=200, unique=True)
    # regex '^\w+$' equals [a-zA-Z_]
    username = StringField(regex='^\w+$', required=True, max_length=15, min_length=3, unique=True)
    fullname = StringField(required=True, max_length=20)
    password = StringField(required=True)
    cover = StringField(default='')
    avatar = StringField(default='')
    dob = DateTimeField(default='')
    created_at = DateTimeField(default=datetime.datetime.utcnow())
    updated_at = DateTimeField(default=datetime.datetime.utcnow())
    bio = StringField(default='')
    location = StringField(default='')
    verification = EmbeddedDocumentField(Verification, required=True)
    account_type = StringField(required=True, default='regular', choices=('page', 'regular'))
    status = StringField(required=True, default='inactive', choices=('inactive', 'active', 'block'))
    phone = StringField(regex='^$|^[0-9()\\-\\.\\s]+$', default='')

Tags: truedefaultonlydatetimeobjectsemailstatusrequired