在内部,这两个字段之间有什么区别?这些字段在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/

10-12 15:13