mongodb 联合查询问题
高洛峰
高洛峰 2017-04-21 11:18:37
0
3
625
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)
小葫芦

私のニーズについて話しているだけです。コメントの数には、メイン投稿に追加のフィールド属性が必要です。投稿が非常に人気があり、何百万ものコメントが付いている場合でも、なぜ毎回カウントする必要があるのでしょうか?

いいねを押す +0
迷茫

偉い人とチャットしましょう。いくつかの方法があります。これは非常に興味深い質問です。

  1. 現在のスキーマを保持する
    MongoDB のドキュメント モデルは結合がないと判断するため、2 回クエリを実行する必要があります。使用している Object-Document-Mapper の構文を確認してください。

  2. 投稿にコメントを埋め込み、クライアント側でコメントをカウントします。
    クエリ中に、ドキュメント全体がクライアントに取り込まれ、カウントされます。データ送信のこの部分は無駄になります。ただし、単一の投稿が表示されると、すべての情報が利用可能になります。コメントがあまりない場合は、このスキーマが推奨されるアプローチです。しかし、私たちはさらに改善することができます。

  3. 投稿にコメントを埋め込み、集計フレームワークを使用してコメントをカウントします。
    db.posts.aggregate(...)、unwind、group を使用します。この方法はちょっとやりすぎです...

  4. 投稿にコメントを埋め込み、カウントキャッシュを追加します。
    上記で提案したように、そのまま保持することもできますが、ドキュメント内にある場合は、更新によってコメント $push到comments里,同时$inc がカウントされるため、一貫性が非常によく維持されます。クエリを実行するときは、コメントなしで 2 番目の射影パラメータを書き出すだけです。たとえば、最も近い 10 を見つけたいとします。

リーリー
いいねを押す +0
伊谢尔伦

多くの情報を検索し、最終的には別の統計属性を追加しました

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート