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

时间:2016-03-09 11:26:53

标签: 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")
    {
      emit([doc.Acc_no,doc.User_Id],[doc.Credit_Amount,doc.Debit_Amount]);
    }
}

这是我的缩减功能

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])
    }

当我传递此密钥时

[138,"xirbzsewiw"]
group level 2

我得到了这个输出

[ 99, 67 ]

但是当我把它作为关键

[138]
group level 1

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

2 个答案:

答案 0 :(得分:1)

Abhi是正确的,指定键的结果集为空,因此reduce也为空。您可以通过查询reduce=false来检查。

您可能会对使用startkeyendkey获取范围的其他问题感到困惑。使用startkeyendkey您无需指定精确键,第一次部分匹配将被视为开头或结尾。在您的示例中,如果使用startkey=[138]&endkey=[139]&inclusive_end=false进行查询,则应该会看到预期的结果。

答案 1 :(得分:0)

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

  • 您的地图功能会发出如下键:[138,&#34; xirbzsewiw&#34;]
  • 您需要将地图功能生成的密钥传递为&#34;密钥&#34;在做减少操作的同时。在第二种情况下,您传递[138],这不是合法密钥,因此它与索引中的任何内容都不匹配,因此您不会看到任何输出。

group_level会对输出进行过滤,即您希望从字符串数组中获取的索引数。您可能希望查看understanding group level view queries,如果您还没有更好地了解group_level