Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在CouchDB reduce函数中按分组_Couchdb_Pouchdb - Fatal编程技术网

如何在CouchDB reduce函数中按分组

如何在CouchDB reduce函数中按分组,couchdb,pouchdb,Couchdb,Pouchdb,在使用pockdb/CouchDB时,我试图掌握map/reduce查询 我的数据库中有很多文档,但我需要创建一个查询文档的设计,并将所有唯一的团队名称作为密钥提供给我,然后告诉我 a) 每个团队中有多少个独特的病房 b) 每个团队的作业总数(所有病房) 我的数据结构是: { "_id": "0448071807c0f37f53e06aab54034a42", "_rev": "6-13fd78ada9c8833ec36a01af0acd5957", "team": "T

在使用pockdb/CouchDB时,我试图掌握map/reduce查询

我的数据库中有很多文档,但我需要创建一个查询文档的设计,并将所有唯一的团队名称作为密钥提供给我,然后告诉我

a) 每个团队中有多少个独特的病房

b) 每个团队的作业总数(所有病房)

我的数据结构是:

{
    "_id": "0448071807c0f37f53e06aab54034a42",
    "_rev": "6-13fd78ada9c8833ec36a01af0acd5957",
    "team": "Team A",
    "ward": "Ward A",
    "date": "2017-03-30",
    "person": "Alice",
    "bed": "Bed 001",
    "jobs": [1,2,3,4]
}

{
    "_id": "0448071807c0f37f53e06aab54034a42",
    "_rev": "6-13fd78ada9c8833ec36a01af0acd5957",
    "team": "Team A",
    "ward": "Ward B",
    "date": "2017-03-30",
    "person": "Bob",
    "bed": "Bed 001",
    "jobs": [1,2]
}   

{
    "_id": "0448071807c0f37f53e06aab54034a42",
    "_rev": "6-13fd78ada9c8833ec36a01af0acd5957",
    "team": "Team A",
    "ward": "Ward C",
    "date": "2017-03-30",
    "person": "Charles",
    "bed": "Bed 001",
    "jobs": [9,5]
}   

{
    "_id": "0448071807c0f37f53e06aab54034a42",
    "_rev": "6-13fd78ada9c8833ec36a01af0acd5957",
    "team": "Team B",
    "ward": "Ward 00",
    "date": "2017-03-30",
    "person": "David",
    "bed": "Bed 001",
    "jobs": [1]
}   
我期望的输出如下所示:

A队 -3个独特的病房 -8份工作

B队 -1个独立病房 -1份工作

e、 g

我的地图目前是:

{
   "all": {
       "map": "function(doc) { emit(doc.team, doc) }"
   }
}
这是我奋斗的起点

编辑

我采纳了上一篇文章中的建议,但这只是我挑战的一半

如果我使用:

{
   "all": {
       "map": "function(doc) { emit([doc.team, doc.ward], 1) }",
       "reduce": "function(keys, values) { return sum(values); }"
   }
}

然后转到,我看到了独特的团队(良好)和出现次数(也很好),但我不确定如何扩展reduce函数以包括作业总数。

首先,您必须发出作业长度(具有作业数):

然后,您需要这样一个reduce函数:

function (keys, values, rereduce) {
  var stats = {uniq:0,jobs:0};
  if (rereduce) {
    for(var i=0;i<values.length;i++){
     stats.uniq += values[i].uniq;
     stats.jobs += values[i].jobs;
    }
    return stats;
  }
  stats.uniq = values.length;
  stats.jobs = sum(values);
  return stats;
}
函数(键、值、返回值){
var stats={uniq:0,jobs:0};
如果(减少){

对于(var i=0;我可能重复感谢。我更新了我的问题,因为我从那篇文章中学到了什么。这很有帮助,但我还是有点笨。这很好,非常有帮助。谢谢。
function (doc) {
  emit([doc.team,doc.ward],doc.jobs.length);
}
function (keys, values, rereduce) {
  var stats = {uniq:0,jobs:0};
  if (rereduce) {
    for(var i=0;i<values.length;i++){
     stats.uniq += values[i].uniq;
     stats.jobs += values[i].jobs;
    }
    return stats;
  }
  stats.uniq = values.length;
  stats.jobs = sum(values);
  return stats;
}