我的地图会有以下回复减少。 现在我想计算响应中的行数,任何人都可以帮助我如何在cloudant中做到这一点?我需要一些回应,比如在一段时间内获得不同相关性的总数。
{
rows: [
{
key: [
"201705",
"aws-60826346-"
],
value: null
},
{
key: [
"201705",
"aws-60826348802-"
],
value: null
},
{
key: [
"201705",
"aws-las97628elb"
],
value: null
},
{
key: [
"201705",
"aws-ve-test"
],
value: null
},
{
key: [
"201705",
"aws-6032dcbce"
],
value: null
},
{
key: [
"201705",
"aws-60826348831d"
],
value: null
},
{
key: [
"201705",
"aws-608263488833926e"
],
value: null
},
{
key: [
"201705",
"aws-608263488a74f"
],
value: null
}
]
}
答案 0 :(得分:1)
你需要实现一个名为" chained map-reduce"实现这一目标。您无法在Cloudant管理GUI中执行此操作,因此您必须手动编写设计文档。
让map / reduce发出一个数组作为键。第一个数组元素为month
,第二个数组元素为correlationid
。该值应为1.然后将内置_count
指定为reduce函数。
现在您需要添加链接部分。链接基本上涉及自动将map / reduce的结果复制到新数据库中。然后,您可以在该数据库上执行另一个map / reduce。从而创建一系列地图/减少...
这是一个使用您的示例的小样本数据库: https://rajsingh.cloudant.com/so44106569/_all_docs?include_docs=true&limit=200
这里包含map / reduce的设计文档,以及更新新数据库(在本例中称为dbcopy
)的sob44106569
命令,其中包含名为{的视图的结果{1}}:
view
这里是显示10行的map函数(no reduce)的结果。请注意,有两个文档包含月{
"_id": "_design/ddoc",
"_rev": "11-88ff7d977dfff81a05c50b13d854a78f",
"options": {
"epi": {
"dbcopy":
{
"view": "sob44106569"
}
}
},
"language": "javascript",
"views": {
"view": {
"reduce": "_count",
"map": "function (doc) {\n emit([doc.month, doc.machine], 1);\n}"
}
}
}
和计算机201705
:
https://rajsingh.cloudant.com/so44106569/_design/ddoc/_view/view?limit=200&reduce=false
如果您只是在aws-6032dcbce
对此视图执行内置的_count
缩减,那么您将获得201705的 9 值,这是错误的出于您的目的,因为您只想计算group_level=1
一次,即使它在数据中显示两次:
因此,让我们快速浏览aws-6032dcbce
处的地图/缩小。这是复制到新数据库的原因:
在这里,您可以看到group_level=2
仅显示一次(但值为2),因此这是一个有用的视图。我们的map / reduce的aws-6032dcbce
部分会根据此视图创建数据库dbcopy
。让我们来看看:
https://rajsingh.cloudant.com/sob44106569/_all_docs?include_docs=true
现在我们可以在该数据库上运行一个非常简单的map / reduce,再次发出月份和机器(现在它们在一个数组中,所以有不同的名称),但这次机器的重复值已经是&#34 ;减小"程。
sob44106569
最后,这里有不同的"机器"。现在我们终于可以看到201705的 8 的期望值。
响应:
function (doc) {
if (doc.key && doc.key.length == 2 )
emit(doc.key[0], doc.key[1]);
}
答案 1 :(得分:0)
发出1而不是null并使用内置的reducer _count。