How to represent the data for threaded comments(along with comment voting) in mongodb?
对于我的博客,我想要合并我自己的评论系统,而不依赖于默认的wordpress评论系统。 我需要使用注释模块来使用mongodb而不是mysql,模块需要支持以下内容:
在这种情况下,什么是表示mongodb中数据的最佳方式?
只需存储您想要在博客上显示的评论。你想要线程/嵌套的评论?然后以嵌套方式存储它们:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | postId: { comments: [ { id:"47cc67093475061e3d95369d" // ObjectId title:"Title of comment", body:"Comment body", timestamp: 123456789, author:"authorIdentifier", upVotes: 11, downVotes: 2, comments: [ { id:"58ab67093475061e3d95a684" title:"Nested comment", body:"Hello, this is a nested/threaded comment", timestamp: 123456789, author:"authorIdentifier", upVotes: 11, downVotes: 2, comments: [ // More nested comments ] } ] }, { // Another top-level comment } ] } |
要获得聚合投票,您需要在以下某处编写map-reduce函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | function map() { mapRecursive(this.comments) } function mapRecursive(comments) { comments.forEach( function (c) { emit(comment.author, { upVotes: c.upVotes, downVotes: c.downVotes }); mapRecursive(c.comments); } ); } function reduce(key, values) { var upVotes = 0; var downVotes = 0; values.forEach( function(votes) { upVotes += votes.upVotes; downVotes += votes.downVotes; } ); return { upVotes: upVotes, downVotes: downVotes }; } |
我没有测试过这些函数,也没有检查
怎么样:
-
所有评论的单一集合。每个注释对象都包含对用于线程的父注释对象的引用,当然还包含对父博客帖子的引用。
-
每个注释对象也有数字投票计数,可以使用mongo的原子更新进行更新。
-
然后,用户的每个特定投票将直接引用用户对象中的注释id。