टिप्पणियों को वैसे ही संग्रहीत करें जैसे आप चाहते हैं कि वे आपके ब्लॉग पर प्रदर्शित हों। आप थ्रेडेड/नेस्टेड टिप्पणियां चाहते हैं? फिर उन्हें नेस्टेड तरीके से स्टोर करें:
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
उस ब्लॉग पोस्ट को संदर्भित करता है जिससे टिप्पणियां संबंधित हैं और कुंजी (या _id
.) के रूप में उपयोग की गई हैं MongoDB में) दस्तावेज़। प्रत्येक टिप्पणी का एक विशिष्ट id
होता है , व्यक्तिगत टिप्पणियों पर वोट देने या टिप्पणी करने के लिए।
एकत्रित वोट प्राप्त करने के लिए, आपको इन पंक्तियों के साथ कहीं न कहीं मैप-रिड्यूस फंक्शन लिखने होंगे:
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 };
}
मैंने इन कार्यों का परीक्षण नहीं किया है और वे null
की जांच नहीं करते हैं मान या तो। यह आप पर निर्भर है :)