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() # 内容
问题:第一个是主贴子表,第二个是评论表,现在要查询出主贴的列表,并且统计出主贴的评论数 有什么好的办法 ?
Hanya bercakap tentang keperluan saya. Bilangan ulasan harus mempunyai atribut medan tambahan pada siaran utama. Mengapa anda perlu mengira setiap kali Jika siaran sangat popular dan mempunyai jutaan komen, adakah anda masih perlu mengira?
Berbual dengan orang besar. Terdapat beberapa cara. Ini adalah soalan yang sangat menarik.
Kekalkan skema semasa
Model dokumen MongoDB menentukan bahawa ia tidak mempunyai gabungan, jadi ia perlu disoal dua kali. Lihatlah sintaks Object-Document-Mapper yang anda gunakan.
Benamkan ulasan dalam siaran dan kirakannya di sisi pelanggan.
Semasa Pertanyaan, keseluruhan dokumen dibawa kepada pelanggan dan dikira. Bahagian penghantaran data ini sia-sia. Tetapi apabila satu siaran dipaparkan, semua maklumat tersedia. Jika anda tidak mempunyai banyak ulasan, skema ini ialah pendekatan yang disyorkan. Tetapi kita boleh memperbaiki lagi.
Benamkan ulasan dalam siaran dan gunakan rangka kerja pengagregatan untuk mengiranya.
Gunakan db.posts.aggregate(...), berehat, kumpulan. Kaedah ini agak berlebihan...
Benamkan ulasan dalam siaran dan tambahkan cache pengiraan.
Anda juga boleh mengekalkannya seperti sekarang seperti yang dicadangkan di atas, tetapi jika mereka berada dalam dokumen, kemas kini akan meletakkan ulasan
$push
ke dalam ulasan, dan pada masa yang sama$inc
akan dikira, yang mengekalkan konsistensi sangat baiklah. Apabila membuat pertanyaan, hanya tulis parameter unjuran kedua tanpa ulasan. Sebagai contoh, anda ingin mencari 10 yang terdekat.Saya mencari banyak maklumat, dan akhirnya menambah atribut statistik yang berasingan