我是 mongodb 的新手,我非常喜欢noSql的想法。
我正在尝试建立一个博客,在每个评论中,人们可以点击评分按钮并评价评论。
在每个评论中,我有一系列投票,其中有投票类型和唯一的IP。 每个用户点击按钮都会插入一行(每个IP一次)。
最后,我想查询文档/帖子并获取以下结构中的信息:CalculatedVotes,distinct VoteType,Caption and count
我想要检索的结果
{ PostTitle:"This is a blog post", Posted:"12/12/2012", ByUsertId:"2", Body:"This is a simple body" Comments: [ { PostedBy:"someUser", Text:"Hi There!", CalculatedVotes: [ { VoteType:"AGREE", Caption="I agree!", Count:2 }, { VoteType:"NOT_AGREE", Caption="No Way!", Count:1 }, ] }, { PostedBy:"someUser2", Text:"Whats up?", CalculatedVotes: [ { VoteType:"AGREE", Caption="I agree!", Count:1 }, { VoteType:"NOT_AGREE", Caption="No Way!", Count:2 }, ] } ] }
文档结构
{ PostTitle:"This is a blog post", Posted:"12/12/2012", ByUsertId:2, Body:"This is a simple body" Comments: [ { PostedBy:"someUser", Text:"Hi There!", Votes: [ { VoteType:"AGREE", Caption="I agree!", IP:"1.1.1.1" }, { VoteType:"NOT_AGREE", Caption="No Way!", IP:"2.2.2.2" }, { VoteType:"AGREE", Caption="I agree!", IP:"3.3.3.3" } ] }, { PostedBy:"someUser2", Text:"Whats up?", Votes: [ { VoteType:"NOT_AGREE", Caption="No Way!", IP:"1.1.1.1" }, { VoteType:"NOT_AGREE", Caption="No Way!", IP:"2.2.2.2" }, { VoteType:"AGREE", Caption="I agree!", IP:"3.3.3.3" } ] } ] }
答案 0 :(得分:0)
我想说最好重新考虑你的架构。描述了存储层次结构的一个很好的例子here。
在您的架构中,您将遇到多个问题,其中最重要的是,如果讨论时间过长,您将最终得到一个最终将超过最大文档大小(16MB)的巨大文档。此外,您将只需要获取一些文档,但即使您不需要它也将始终进行大量的完整讨论(并且很难根据嵌入式结构的深度进行过滤)。
最后但并非最不重要的一点是,处理计数的最佳方法是在记录投票时实时增加投票数,以避免重新计算投票的开销,并且还有额外的好处,您可以通过投票或如果需要,甚至可以通过投票进行索引。