Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

मोंगोडब में थ्रेडेड टिप्पणियों (टिप्पणी मतदान के साथ) के लिए डेटा का प्रतिनिधित्व कैसे करें?

टिप्पणियों को वैसे ही संग्रहीत करें जैसे आप चाहते हैं कि वे आपके ब्लॉग पर प्रदर्शित हों। आप थ्रेडेड/नेस्टेड टिप्पणियां चाहते हैं? फिर उन्हें नेस्टेड तरीके से स्टोर करें:

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 की जांच नहीं करते हैं मान या तो। यह आप पर निर्भर है :)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटाबेस डिजाइन:ईएवी विकल्प?

  2. PostgreSQL और MySQL क्रॉस प्रतिकृति का अवलोकन

  3. नाम में एम्परसेंड के साथ क्वेरी तालिका

  4. Mysql गतिशील डेटाबेस नाम के साथ तालिका बनाएँ

  5. MySQL कनेक्शन पूल गणना