rethinkdb:按ID分组并返回另一个attr的计数

我有一个表,有一些像(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 ] 

我认为这是你正在寻找的分组映射:

 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周的时间安排)将会用一个更好的group命令来取代groupedMapReduce