Chỉ cần lưu trữ các nhận xét như bạn muốn chúng được trình bày trên blog của bạn. Bạn muốn nhận xét theo luồng / lồng nhau? Sau đó, lưu trữ chúng theo kiểu lồng nhau:
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
}
]
}
postId
đề cập đến bài đăng trên blog mà các nhận xét thuộc về và đã được sử dụng làm khóa (hoặc _id
trong MongoDB) của tài liệu. Mỗi nhận xét có một id
duy nhất , để bỏ phiếu hoặc bình luận về các nhận xét cá nhân.
Để nhận được các phiếu bầu tổng hợp, bạn sẽ cần viết các hàm thu nhỏ bản đồ ở đâu đó dọc theo các dòng sau:
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 };
}
Tôi chưa kiểm tra các chức năng này và chúng không kiểm tra null
các giá trị. Điều đó tùy thuộc vào bạn :)