我有一张表格,其中包含一些像(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
]
答案 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
。