sql >> データベース >  >> RDS >> Mysql

mongodbでスレッド化されたコメントのデータを(コメント投票とともに)表すにはどうすればよいですか?

    コメントをブログに表示したいとおりに保存してください。スレッド化/ネストされたコメントが必要ですか?次に、それらをネストされた方法で保存します:

    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があります 、個々のコメントに投票またはコメントするため。

    集計された票を取得するには、次の行に沿ってmap-reduce関数を作成する必要があります。

    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. groupbyステートメントを使用せずに個別の行を選択する方法

    2. 行の挿入時に最後のID(IDENTITY)を返すVB.NET MySQL

    3. 最初の文字を大文字で表示するにはどうすればよいですか?

    4. SUSEにsqlcmd&bcpをインストールする方法