CouchDB reduce函数在这种情况下有用吗?
我想把选票储存在CouchDB里。为了解决在一个文档中增加一个字段并进行数百万次修订的问题,每次投票将是一个单独的文档: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"){
{
_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
当您添加更多投票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