2017-09-14 136 views
1

由于MongoEngine says in documentation:为什么在MongoEngine中排除()不会排除所有字段?

只(*域)负载只有这个文件的域的子集。

后= BlogPost.objects(...)只( '标题', 'author.name')

现在我对我自己的用户采集运行下同:

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

但是,当我打印输出(print user.to_json())它给像下面的结果:

{"_id": {"$oid": "59ba3c7428999b08223dc4aa"}, "cover": "", "avatar": "", "dob": {"$date": 1505347200000}, "created_at": {"$date": 1505384574064}, "updated_at": {"$date": 1505384574064}, "bio": "", "location": "", "account_type": "regular", "status": "inactive", "phone": ""} 

我不认为我已经在这里错过了一些东西。

现在我用排除列入黑名单的某些字段:

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": ""} 

usernameemail被排除,但不statusbio

我的用户模型为:

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='') 

回答

1

看来,在案例文档领域的exclude返回默认值,他们被排除:

Exclude in mongoEngine