计算响应中cloudant中的行数

时间:2017-05-22 07:06:33

标签: cloudant nosql

我的地图会有以下回复减少。 现在我想计算响应中的行数,任何人都可以帮助我如何在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
}
]
}

2 个答案:

答案 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}" } } } 和计算机201705https://rajsingh.cloudant.com/so44106569/_design/ddoc/_view/view?limit=200&reduce=false

如果您只是在aws-6032dcbce对此视图执行内置的_count缩减,那么您将获得201705的 9 值,这是错误的出于您的目的,因为您只想计算group_level=1一次,即使它在数据中显示两次:

https://rajsingh.cloudant.com/so44106569/_design/ddoc/_view/view?limit=200&reduce=true&group=true&group_level=1

因此,让我们快速浏览aws-6032dcbce处的地图/缩小。这是复制到新数据库的原因:

https://rajsingh.cloudant.com/so44106569/_design/ddoc/_view/view?limit=200&reduce=true&group=true&group_level=2

在这里,您可以看到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 的期望值。

https://rajsingh.cloudant.com/sob44106569/_design/views/_view/counted?limit=200&reduce=true&group=true&group_level=1

响应

function (doc) {
  if (doc.key && doc.key.length == 2 )
    emit(doc.key[0], doc.key[1]);
}

答案 1 :(得分:0)

发出1而不是null并使用内置的reducer _count。