问题:第一个是主贴子表,第二个是评论表,现在要查询出主贴的列表,并且统计出主贴的评论数 有什么好的办法 ?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
跟大牛们聊了一下。有以下几种办法。这是个挺有意思的问题。
1.
保持现在的schema
MongoDB的文档模型决定了它没有Join,所以只好查询两次了。看看你用的 Object-Document-Mapper 的语法吧。
2.
把comments嵌入在post中,客户端计数。
Query的时候把整个文档都拿到client来,计数。浪费了这部分数据传输。但在单个post的显示的时候,所有信息都有了。如果你的comment不多,这种schema是推荐的办法。但是我们可以进一步改进。
3.
把comments嵌入在post中,用aggregation framework计数。
用db.posts.aggregate(...),unwind, group。这个方法有点overkilling了……
4.
把comments嵌入在post中,加个计数的缓存。
也可以像楼上建议的那样,保持现在的样子,不过如果他们在一个doc里,一个update把comment $push到comments里,同时$inc计数,很好地保持了一致性。查询的时候,把第二个projection参数写出来,不要comments就好了。比如想找最近的10个。
db.posts.find({}, { comments: -1 }).sort({"when": -1}).limit(10)