sql >> Database >  >> RDS >> Mysql

Hoe de gegevens voor reacties met threads (samen met stemmen op reacties) in mongodb weer te geven?

Sla de opmerkingen gewoon op zoals u wilt dat ze op uw blog worden weergegeven. Wil je reacties met threads/nesten? Sla ze vervolgens genest op:

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
    }
  ]
}

De postId verwijst naar de blogpost waartoe de opmerkingen behoren en is gebruikt als de sleutel (of _id in MongoDB) van het document. Elke opmerking heeft een unieke id , om te stemmen of commentaar te geven op individuele opmerkingen.

Om de verzamelde stemmen te krijgen, moet je kaartverkleinende functies ergens langs deze lijnen schrijven:

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 };
}

Ik heb deze functies niet getest en ze controleren niet op null waarden ook niet. Dat is aan jou :)



  1. CakePHP Pagineringtelling komt niet overeen met zoekopdracht?

  2. Stel de AUTOINCREMENT-waarde in in de django-tabel

  3. Hoe stel ik 'begin met' van de reeks in om het queryresultaat in de SQL-server te selecteren?

  4. Sprong SQL-kloof over specifieke voorwaarde en correct gebruik van lead()