使用多个参数在CouchDB中映射/减少?

时间:2010-09-06 17:33:20

标签: map nosql couchdb mapreduce

我想知道如何使用CouchDB的map / reduce和多个参数。例如,如果我的球队有年龄和性别的球员,我想我会为我的地图功能做这个:

"function(doc){
  if(doc.team_name) {
    emit(doc.team_name, doc);
  }
}"

但是,我不确定如何编写一个reduce函数来获得团队中最年长的男性玩家或最年轻的女性或任意查询。我可以在URL中传入参数,还是必须编写多个视图?

提前致谢,

1 个答案:

答案 0 :(得分:5)

减少功能有一点不同的目的。 Reduce函数为它处理的所有文档分组一些值。所以你可以,例如将玩家的工资,年龄或计算数量加起来。

如果您想获得团队中年龄最大的玩家,只需将emit功能中的密钥设置为[team, age]即可。视图始终按键排序。

function(doc) {
  if (doc.team_name) {
    emit([doc.team_name, doc.age], doc);
  }
}

现在只查询您的观点。添加参数descending=true,因此最老的玩家是第一个。默认情况下,视图顺序是升序。如果您想让特定团队中的玩家(仍按年龄排序)添加参数:startkey=[<team>, 999]&endkey=[<team>,0]&descending=true