Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak reprezentować dane dla komentarzy w wątkach (wraz z głosowaniem na komentarze) w mongodb?

Po prostu przechowuj komentarze tak, jak chcesz, aby były reprezentowane na swoim blogu. Chcesz komentarze z wątkami/zagnieżdżonymi? Następnie przechowuj je w sposób zagnieżdżony:

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 odnosi się do wpisu na blogu, do którego należą komentarze i został użyty jako klucz (lub _id w MongoDB) dokumentu. Każdy komentarz ma unikalny id , aby głosować lub komentować poszczególne komentarze.

Aby uzyskać zagregowane głosy, musisz napisać funkcje map-reduce gdzieś w następujący sposób:

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

Nie testowałem tych funkcji i nie sprawdzają, czy nie ma null wartości. To zależy od Ciebie :)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. INDIE, STD Code Finder Script w PHP, MYSQL, JQUERY

  2. Hasło nie sprawdza rozróżniania wielkości liter

  3. Funkcja MySQL RADIANS() – Konwersja ze stopni na radiany

  4. Składnia SQL DROP TABLE — wymienione przez DBMS

  5. Tworzenie pliku kml z bazy danych mysql za pomocą php