2014-02-20 3 views
3

저는 고전적인 함정에 뛰어 들지만 몽고인과 함께해야 할 일에 대한 좋은 예를 찾을 수 없습니다. (ID some_id와) 지정된 블로그 게시물에 대한mongoengine 임베디드 문서 목록을 쿼리하십시오.

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

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

난 그냥 승인 된 댓글 목록을로드 할 : 내가 좋아하는 뭔가를 표준 블로그 예제를 사용

. 게시물의 주석이 승인되면 우연히 모든 주석을로드합니다. 왜냐하면 목록의 요소와 일치하기 때문입니다.

답변

5

주석이 문서에 포함되어 있으므로 주석에는 항상 모든 주석이 포함됩니다.

필터 해당 게시물에 속성을 추가하고 승인 된 코멘트 등의 목록을 반환

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

왜 그걸 어떻게해야 할지를 알 수없는 이유를 설명해 줄 수 있습니다 ... – TristanMatthews

7

이 모델이 시도 :

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

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

주의 사항 : EmbeddedDocumentListField 대신

을의 ListField를 그런 다음이 방법으로 쿼리하십시오.

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

나는 당신을 돕는다.

+0

굉장한 답변입니다.) –

관련 문제