mongodb 联合查询问题
高洛峰
高洛峰 2017-04-21 11:18:37
0
3
594
class Subject(Document):
'''
新闻主题信息
'''
author_ref = ReferenceField(Account,dbref=False)  #关联用户
when = DateTimeField(default=datetime.datetime.now, required=True)                                  
title = StringField(max_length=50)  `                    # 文章标题

`

    class Comment(Document):
'''
评论
'''
subject_ref = ReferenceField(Subject,dbref=False)   #关联主题
display_name = StringField(max_length=50)
author_ref = ReferenceField(Account,dbref=False)
content = StringField()                          # 内容

问题:第一个是主贴子表,第二个是评论表,现在要查询出主贴的列表,并且统计出主贴的评论数 有什么好的办法 ?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

모든 응답(3)
小葫芦

그냥 내 필요사항에 대해 이야기하는 것뿐입니다. 댓글 수에는 기본 게시물에 추가 필드 속성이 있어야 합니다. 게시물이 인기가 많고 댓글이 수백만 개에 달하는 경우에도 매번 계산해야 하는 이유는 무엇인가요?

迷茫

큰 사람들과 채팅하세요. 여러 가지 방법이 있습니다. 이것은 매우 흥미로운 질문입니다.

  1. 현재 스키마 유지
    MongoDB의 문서 모델은 조인이 없다고 판단하므로 두 번 쿼리해야 합니다. 사용 중인 Object-Document-Mapper의 구문을 살펴보세요.

  2. 게시물에 댓글을 삽입하고 클라이언트 측에서 계산합니다.
    쿼리 중에는 전체 문서가 클라이언트로 가져와서 계산됩니다. 데이터 전송의 이 부분은 낭비됩니다. 그러나 단일 게시물이 표시되면 모든 정보를 사용할 수 있습니다. 댓글이 많지 않은 경우 이 스키마를 권장합니다. 하지만 우리는 더 발전할 수 있습니다.

  3. 게시물에 댓글을 삽입하고 집계 프레임워크를 사용하여 댓글 수를 계산합니다.
    db.posts.aggregate(...), 해제, 그룹을 사용하세요. 이 방법은 좀 과한데요...

  4. 게시물에 댓글을 삽입하고 카운팅 캐시를 추가하세요.
    위에서 제안한 대로 지금 그대로 유지할 수도 있지만 문서에 있는 경우 업데이트하면 주석 $push이 주석에 추가되고 $inc이 동시에 계산되므로 일관성이 매우 잘 유지됩니다. 쿼리할 때 주석 없이 두 번째 투영 매개변수를 작성하면 됩니다. 예를 들어, 가장 가까운 10을 찾으려고 합니다.

으아아아
伊谢尔伦

많은 정보를 검색하다가 드디어 별도의 통계 속성을 추가했습니다

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!