mongodb 联合查询问题
高洛峰
高洛峰 2017-04-21 11:18:37
0
3
598
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教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

répondre à tous(3)
小葫芦

Je parle juste de mes besoins. Le nombre de commentaires doit avoir un attribut de champ supplémentaire sur la publication principale. Pourquoi faut-il compter à chaque fois ? Si une publication est très populaire et compte des millions de commentaires, faut-il quand même compter ?

迷茫

Discutez avec les grands. Il existe plusieurs façons. C'est une question très intéressante.

  1. Conserver le schéma actuel
    Le modèle de document de MongoDB détermine qu'il n'a pas de jointure, il doit donc être interrogé deux fois. Jetez un œil à la syntaxe de l’Object-Document-Mapper que vous utilisez.

  2. Intégrez les commentaires dans la publication et comptez-les côté client.
    Lors de la requête, l'intégralité du document est apportée au client et comptée. Cette partie du transfert de données est inutile. Mais lorsqu’un seul article est affiché, toutes les informations sont disponibles. Si vous n’avez pas beaucoup de commentaires, ce schéma est l’approche recommandée. Mais nous pouvons encore nous améliorer.

  3. Intégrez les commentaires dans la publication et utilisez le cadre d'agrégation pour les compter.
    Utilisez db.posts.aggregate(...), déroulez, groupez. Cette méthode est un peu exagérée...

  4. Intégrez les commentaires dans la publication et ajoutez un cache de comptage.
    Vous pouvez également le conserver tel quel comme suggéré ci-dessus, mais s'ils sont dans un doc, une mise à jour mettra le commentaire $push en commentaires, et comptera également $inc, ce qui maintient très bien la cohérence. Lors de l'interrogation, écrivez simplement le deuxième paramètre de projection sans commentaires. Par exemple, vous souhaitez trouver le nombre 10 le plus proche.

db.posts.find({}, { comments: -1 }).sort({"when": -1}).limit(10)
伊谢尔伦

J'ai recherché beaucoup d'informations et j'ai finalement ajouté un attribut statistique distinct

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!