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() # 内容
问题:第一个是主贴子表,第二个是评论表,现在要查询出主贴的列表,并且统计出主贴的评论数 有什么好的办法 ?
私のニーズについて話しているだけです。コメントの数には、メイン投稿に追加のフィールド属性が必要です。投稿が非常に人気があり、何百万ものコメントが付いている場合でも、なぜ毎回カウントする必要があるのでしょうか?
偉い人とチャットしましょう。いくつかの方法があります。これは非常に興味深い質問です。
現在のスキーマを保持する
MongoDB のドキュメント モデルは結合がないと判断するため、2 回クエリを実行する必要があります。使用している Object-Document-Mapper の構文を確認してください。
投稿にコメントを埋め込み、クライアント側でコメントをカウントします。
クエリ中に、ドキュメント全体がクライアントに取り込まれ、カウントされます。データ送信のこの部分は無駄になります。ただし、単一の投稿が表示されると、すべての情報が利用可能になります。コメントがあまりない場合は、このスキーマが推奨されるアプローチです。しかし、私たちはさらに改善することができます。
投稿にコメントを埋め込み、集計フレームワークを使用してコメントをカウントします。
db.posts.aggregate(...)、unwind、group を使用します。この方法はちょっとやりすぎです...
投稿にコメントを埋め込み、カウントキャッシュを追加します。
上記で提案したように、そのまま保持することもできますが、ドキュメント内にある場合は、更新によってコメント
$push
到comments里,同时$inc
がカウントされるため、一貫性が非常によく維持されます。クエリを実行するときは、コメントなしで 2 番目の射影パラメータを書き出すだけです。たとえば、最も近い 10 を見つけたいとします。多くの情報を検索し、最終的には別の統計属性を追加しました