Mapreduce 使用多个键获取结果的couchbase视图

Mapreduce 使用多个键获取结果的couchbase视图,mapreduce,couchbase,couchbase-view,Mapreduce,Couchbase,Couchbase View,我有以下文件 { "Credit_Amount": 99, "Acc_no": 138, "Job_No": "esmwga", "Source_No": "x", "Temp": 1017, "Document_No": "gaf", "Debit_Amount": 67, "User_Id": "xirbzsewiw" } 我的地图功能是 function (doc, meta) { if(doc.Type == "GLEntry"

我有以下文件

{

   "Credit_Amount": 99,
   "Acc_no": 138,
   "Job_No": "esmwga",
   "Source_No": "x",
   "Temp": 1017,
   "Document_No": "gaf",
   "Debit_Amount": 67,
   "User_Id": "xirbzsewiw"
}
我的地图功能是

function (doc, meta) {
    if(doc.Type == "GLEntry")
    {
      emit([doc.Acc_no,doc.User_Id],[doc.Credit_Amount,doc.Debit_Amount]);
    }
}
这是我的reduce函数

function(key,values,rereduce){
  var sum1=0,sum2=0;
  for(var i=0;i<values.length;++i)
  {
    sum1+=values[i][0];
    sum2+=values[i][1];
  }
  return ([sum1,sum2])
    }
我得到这个输出

[ 99, 67 ]
但当我把这个作为钥匙的时候

[138]
group level 1

我得到的结果是空的。但我所理解的是,当我给出组级别1时,它将只使用acc编号进行分组,所以它应该给出相同的输出。我做错什么了吗?

以下是我认为可能发生的事情:

  • 映射函数会发出如下键:[138,“xirbzsewiw”]
  • 在执行reduce操作时,需要将map函数生成的键传递为“键”。在第二种情况下,您传递的是[138],它不是一个合法的键,因此它不匹配索引中的任何内容,因此您看不到任何输出

group\u level
输出进行过滤,即从字符串数组中获取的索引数。如果您还没有更好地理解
group\u level

Abhi是正确的,那么您可能想看看,指定密钥的结果集是空的,因此reduce也是空的。您可以通过查询
reduce=false
来检查这一点


您可能被问到的另一个问题弄糊涂了,您在哪里使用
startkey
endkey
来获取范围。使用
startkey
endkey
不需要指定精确的键,第一个部分匹配将被视为开始或结束。在您的示例中,如果使用
startkey=[138]&endkey=[139]&inclusive\u end=false进行查询,您应该会看到预期的结果。

所以我无法忽略emit函数中的一些右键值?我想我在某个地方读到过,我们可以跳过一些右边的值,但应该提供所有左边的值。所以
参数中没有部分匹配?只有
startkey
endkey
部分匹配?
[138]
group level 1