CouchDB reduce函数在这种情况下有用吗?

CouchDB reduce函数在这种情况下有用吗?,couchdb,Couchdb,我想把选票储存在CouchDB里。为了解决在一个文档中增加一个字段并进行数百万次修订的问题,每次投票将是一个单独的文档: { _id: "xyz" type: "thumbs_up" vote_id: "test" } 因此,真正的文件本身就是投票。我想要的结果基本上是一个数组:vote_id,sumOfThumbsUp,sumOfThumbsDown 现在我认为我的map函数需要如下所示: if(type=="thumbs_up" | type =="thumbs_down"){

我想把选票储存在CouchDB里。为了解决在一个文档中增加一个字段并进行数百万次修订的问题,每次投票将是一个单独的文档:

{
  _id: "xyz"
  type: "thumbs_up"
  vote_id: "test"
}
因此,真正的文件本身就是投票。我想要的结果基本上是一个数组:vote_id,sumOfThumbsUp,sumOfThumbsDown

现在我认为我的map函数需要如下所示:

if(type=="thumbs_up" | type =="thumbs_down"){
    emit(vote_id, type)
}
现在有一点我不知道该怎么做,我是否应该构建一个reduce函数来对投票类型求和,记住有两种投票类型


或者我应该直接将map函数发出的内容放入数组中进行处理,完全忽略reduce函数吗?

这是map reduce的完美例子!在我看来,让每一份文件都代表一次投票是正确的做法,这将与CouchDB的优势一起发挥作用

我建议采用如下文档结构:

文件 向上投票 否决票
  • 我会使用“投票”的文档类型,这样您的数据库中就可以有其他文档类型(如投票类别信息、用户信息等)
  • 我保持“投票”不变
  • 我创建了一个名为“投票”的值字段,只使用了
    1
    /
    -1
    而不是“竖起大拇指”或“竖起大拇指”(真的没关系,你可以做任何你想做的事情,它会很好地工作)
看法 地图 减少 对于map函数,结果如下所示:

如果你减少它:


当您添加更多投票id种类更多的投票文档时,您可以使用:
/:db/\u design/:ddoc/\u view/:view?reduce=true&group=true&key=“:vote\u id”

精辟解释的解决方案来查询特定的投票id
{
  "type": "vote",
  "vote_id": "test",
  "vote": 1
}
{
  "type": "vote",
  "vote_id": "test",
  "vote": -1
}
function (doc) {
    if (doc.type === "vote") {
        emit(doc.vote_id, doc.vote);
    }
}
_sum