mongoengine query a list of embedded documents

允我心安 提交于 2019-12-22 11:17:11

问题


I'm running into a classic pitfall, but can't find a good example with mongoengine of what I should be doing.

Using the standard blog example I have something like:

class Comment(EmbeddedDocument):
    author = StringField()
    approved = BooleanField(default=False)

class Post(Document):
    id = StringField(required=True, unique=True)
    comments = ListField(EmbeddedDocumentField(Comment))

For a given blog post (with id some_id) I just want to load the list of approved comments. I keep accidentally loading all comments if any of the comments for the post are approved, because I'm matching an element of the list.


回答1:


As the comments are contained with the document then comments will always contain all comments.

Add a property to Post that filters and only returns a list of approved comments eg:

@property
def approved_comments(self):
    return [comment for comment in self.comments if comment.approved]



回答2:


Try this in your models:

class Comment(EmbeddedDocument):
    author = StringField()
    approved = BooleanField(default=False)

class Post(Document):
    id = StringField(required=True, unique=True)
    comments = EmbeddedDocumentListField(Comment)

NOTICE: EmbeddedDocumentListField instead ListField

Then your query in this way

comments_approved =  Post.objects.get(pk=post_id).comments.filter(approve=True)

I Hope help you!



来源:https://stackoverflow.com/questions/21904082/mongoengine-query-a-list-of-embedded-documents

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!