在内部,这两个字段之间有什么区别?这些字段在mongo中映射到哪种模式?此外,应如何将具有关系的文档添加到这些字段?例如,如果我使用
from mongoengine import *
class User(Document):
name = StringField()
class Comment(EmbeddedDocument):
text = StringField()
tag = StringField()
class Post(Document):
title = StringField()
author = ReferenceField(User)
comments = ListField(EmbeddedDocumentField(Comment))
并打电话
>>> some_author = User.objects.get(name="ExampleUserName")
>>> post = Post.objects.get(author=some_author)
>>> post.comments
[]
>>> comment = Comment(text="cool post", tag="django")
>>> comment.save()
>>>
我应该使用post.comments.append(comment)还是post.comments + =注释来附加此文档?我最初的问题源于对如何处理此问题的困惑。
最佳答案
EmbeddedDocumentField
就像DictField
一样是父文档的路径,并与mongo中的父文档一起存储在一条记录中。
要保存EmbeddedDocument
,只需保存父文档。
>>> some_author = User.objects.get(name="ExampleUserName")
>>> post = Post.objects.get(author=some_author)
>>> post.comments
[]
>>> comment = Comment(text="cool post", tag="django")
>>> post.comment.append(comment)
>>> post.save()
>>> post.comment
[<Comment object __unicode__>]
>>> Post.objects.get(author=some_author).comment
[<Comment object __unicode__>]
请参阅文档:http://docs.mongoengine.org/guide/defining-documents.html#embedded-documents。
关于json - mongoengine中EmbeddedDocumentField和ReferenceField有什么区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17454246/