ton*_*994 5 python mongodb mongoengine
我尝试将文档嵌入到动态字段中.但是当我稍后尝试访问它时,它不再是文档对象,它只是一个字典.
这是我刚刚编写的示例代码:
#defining the documents
class Embed(EmbeddedDocument):
field_1 = StringField(db_field='f')
class Doc(Document):
myid = IntField(required=True, unique=True, primary_key=True)
embed_me = DynamicField(db_field='e')
field_x = StringField(db_field='x')
Run Code Online (Sandbox Code Playgroud)
然后我创建一个新文档并保存它:
connect('test')
# the embedded part
embed = Embed(field_1='this is a test')
# the document with the embedded document
doc = Doc(pk=2)
doc.embed_me = embed
doc.save()
Run Code Online (Sandbox Code Playgroud)
到目前为止一切都很好.这是我在db中得到的:
# > db.doc.find()
# { "_id" : 1, "e" : { "f" : "this is a test", "_cls" : "Embed" } }
Run Code Online (Sandbox Code Playgroud)
但是现在,如果我请求文档并尝试从嵌入文档中访问值,我会得到一个例外:
doc, c = Doc.objects.get_or_create(pk=1)
Run Code Online (Sandbox Code Playgroud)
仅供参考:主要文档中的访问权限
print doc.field_x
> None
Run Code Online (Sandbox Code Playgroud)
另请参考:dict看起来没问题,但嵌入式文档中的名称未翻译
print doc.__dict__
> {'_created': False, '_data': {'myid': 1, 'embed_me': {u'_cls': u'Embed', u'f': u'this is a test'}, 'field_x': None}, '_changed_fields': [], '_initialised': True}
Run Code Online (Sandbox Code Playgroud)
现在,在尝试访问嵌入式文档时,异常上升
print doc.embed_me.field_1
> File "embed_err.py", line 31, in <module>
print doc.embed_me.field_1
AttributeError: 'dict' object has no attribute 'field_1
Run Code Online (Sandbox Code Playgroud)
它是什么类型的?
type(doc.embed_me)
> <type 'dict'>
Run Code Online (Sandbox Code Playgroud)
看起来嵌入的文档没有在对象中翻译.我不确定这是一个错误还是我误解了这个概念.谢谢你的建议.
| 归档时间: |
|
| 查看次数: |
1989 次 |
| 最近记录: |