mongoengine取消嵌套文档的引用

时间:2019-02-27 14:35:52

标签: python database nosql mongoengine

我有几个comples mongo模型。例如,一个User引用具有某些属性的Role。现在,当我检索用户时,我希望用引用的角色对象(而不是对象ID)填充角色属性。


from mongoengine import *

connect('test_database')

class Role(Document):
    name = StringField(required=True)
    description = StringField(required=True)

class User(Document):
    role = ReferenceField(Role, reverse_delete_rule=DENY)

r = Role(name='test', description='foo').save()
User(role=r).save()

print(User.objects().select_related()[0].to_mongo().to_dict())

# prints: {'_id': ObjectId('5c769af4e98fc24f4a82fd99'), 'role': ObjectId('5c769af4e98fc24f4a82fd98')}
# want:   {'_id': '5c769af4e98fc24f4a82fd99', 'role': {'name' : 'test', 'description' : 'foo'}}

对于任何复杂的mongoengine对象,我该如何实现?

1 个答案:

答案 0 :(得分:0)

Mongoengine并没有提供任何现成的东西,但是您可以在Document类上定义一个方法(例如to_dict(self)),或者使用诸如marshmallow-mongoengine之类的序列化库