5

簡単な質問mongodbにアーティカルのリストがあり、ユーザーがアーティカルに賛成または反対票を投じられるようにしたいと思います。

私の最初の方法は、アーティカルコレクションで、upvoteとdownvoteという2つの行を作成し、upvote:360 downvote:102のような番号を付けることです。

それから私はこれを合計賛成票から反対票を投じて注文する必要があります。これはアーティカルの好きなものの合計を示します。

私の質問はmongoDBにあります。これはそれを行うための最良の方法ですか、それとも1つの「投票」でそれを注文し、その投票で注文する方がよいのでしょうか。

ありがとうございました

4

1 に答える 1

7

そのようにすると、どのユーザーがすでに投票したかを追跡できないため、ユーザーは複数回投票できます。それは確かにあなたの興味ではありません。

そのため、各記事に配列「投票」を追加します。この配列には、投票を行ったユーザーを一意に識別する各投票のオブジェクトが含まれています。

votes: [ 
        { voter:"name or ID or IP address or some other unique identifier for the person who voted",
          vote:-1 },
        { voter:"someone else",
          vote:1 },
        { voter:"and someone entirely different",
          vote:-1 }
    ]

記事IDとvotes.voterに対して一意のインデックスを作成すると、誰も記事に2回投票できないようになります。

反対票に「-1」、賛成票に「1」の値を使用すると、$ sum集計関数を使用して記事の合計スコアを計算できます(後で、気が向いたときに加重投票を簡単に導入できます。いいね)。

于 2012-09-09T13:06:01.370 に答える