【问题标题】:Map/Reduce in CouchDB with multiple parameters?使用多个参数在 CouchDB 中映射/减少?
【发布时间】:2010-09-06 17:33:20
【问题描述】:

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

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

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

提前致谢,

【问题讨论】:

    标签: map nosql couchdb mapreduce


    【解决方案1】:

    Reduce 函数的用途有点不同。 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

    【讨论】:

    • 这样的结果不会是按照团队名称而不是团队年龄排序的列表吗?我的建议是:emit([doc.age, doc.team_name], doc);
    猜你喜欢
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    相关资源
    最近更新 更多