使用多个键获取结果的 Couchbase 视图
couchbase view using multiple keys to get result
我有以下文件
{
"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])
}
当我传递这把钥匙时
[138,"xirbzsewiw"]
group level 2
我得到这个输出
[ 99, 67 ]
但是当我把它作为密钥时
[138]
group level 1
我得到空结果。但我所了解的是,当我给出组级别 1 时,它将仅使用 acc 编号进行分组,因此它应该给出相同的输出。我做错了什么吗?
以下是我认为可能发生的情况:
- 您的地图函数发出如下键:[138,"xirbzsewiw"]
- 在进行归约操作时,您需要将 map 函数生成的键作为 "keys" 传递。在第二种情况下,您传递的是 [138],它不是合法密钥,因此它与索引中的任何内容都不匹配,因此您看不到任何输出。
group_level
对 output 进行过滤,即您希望从字符串数组中获取的索引数量。如果您还没有更好地理解 group_level
,您可能想看看 understanding group level view queries
Abhi 是正确的,您指定键的结果集是空的,因此 reduce 也是空的。您可以通过 reduce=false
.
查询来检查
您可能对您在何处使用 startkey
和 endkey
获取范围的另一个问题感到困惑。使用 startkey
和 endkey
您不需要指定确切的键,第一个部分匹配将被视为开始或结束。在您的示例中,如果您使用 startkey=[138]&endkey=[139]&inclusive_end=false
进行查询,您应该会看到您期望的结果。
我有以下文件
{
"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])
}
当我传递这把钥匙时
[138,"xirbzsewiw"]
group level 2
我得到这个输出
[ 99, 67 ]
但是当我把它作为密钥时
[138]
group level 1
我得到空结果。但我所了解的是,当我给出组级别 1 时,它将仅使用 acc 编号进行分组,因此它应该给出相同的输出。我做错了什么吗?
以下是我认为可能发生的情况:
- 您的地图函数发出如下键:[138,"xirbzsewiw"]
- 在进行归约操作时,您需要将 map 函数生成的键作为 "keys" 传递。在第二种情况下,您传递的是 [138],它不是合法密钥,因此它与索引中的任何内容都不匹配,因此您看不到任何输出。
group_level
对 output 进行过滤,即您希望从字符串数组中获取的索引数量。如果您还没有更好地理解 group_level
Abhi 是正确的,您指定键的结果集是空的,因此 reduce 也是空的。您可以通过 reduce=false
.
您可能对您在何处使用 startkey
和 endkey
获取范围的另一个问题感到困惑。使用 startkey
和 endkey
您不需要指定确切的键,第一个部分匹配将被视为开始或结束。在您的示例中,如果您使用 startkey=[138]&endkey=[139]&inclusive_end=false
进行查询,您应该会看到您期望的结果。