rethinkdb:按ID分组并在另一个attr上返回count

时间:2014-03-06 17:48:23

标签: javascript node.js rethinkdb

我有一张表格,其中包含一些像(id,song_id,user_id和vote)这样的条目。 投票可以包含值“喜欢”或“不喜欢”

现在我想通过song_id创建一个按组分组的队列,然后从该组中返回喜欢和不喜欢的数量

r.db('songs').table('votes').groupedMapReduce(
    function(vote) { return vote('song_id')},
    function(vote) { return vote.pluck('vote')},
    function(acc, vote) {
        return ?????;
        /* 
        ** some kind of loop to get all the likes and dislikes
        ** if vote === 'like' likes++
        ** if vote === 'dislike' dislikes++
        ** return {song_id:song_id, likes:likes, dislikes:dislikes}
        */
    }
 )

希望输出如下:

[
    {song_id: 1, likes: 8, dislikes: 3},
    {song_id: 2, likes: 2, dislikes: 6},
    // and so on
]

1 个答案:

答案 0 :(得分:2)

我认为这是您正在寻找的分组MapReduce:

r.db('songs').table('votes').groupedMapReduce(
    function(vote) { return vote('song_id')},
    function(vote) { return r.branch(
        vote("vote").eq("like"),
        {like: 1, dislike: 0},
        {like: 0, dislike: 1}
    )},
    function(left, right) {
        return {
            like: left("like").add(right("like")),
            dislike: left("dislike").add(right("dislike"))
        }
    }
)

另外,RethinkDB下一版本(1-2周内安排)将用更好的groupedMapReduce命令替换group