了解 couchdb 中 map/reduce 函数的用法
Understanding the usage of map/reduce functions in couchdb
我的映射函数后有以下输出键值对。
["hello"] => 12
["hello"] => 1
["world"] => 23
["world"] => 4
["canada"] => 18
当我使用 __count 作为 reduce 函数时,我得到了 结果 5 如下。
系统计算每一行。
{
"rows": [
{
"key": null,
"value": 5
}
]
}
我再次使用与 __count 相同的地图函数。这次我将 group=true 添加到查询中.我得到以下结果。似乎 reduce 函数适用于每个分组键并计算它们本身。
["hello"] => 2
["world"] => 2
["canada"] => 1
我无法理解这里的机制。为什么系统在有和没有分组的情况下都是这样工作的。如果 reduce 函数适用于 every unique key ,没有分组的结果不应该像下面这样吗?
["hello"] => 1
["hello"] => 1
["world"] => 1
["world"] => 1
["canada"] => 1
使用 reduce=true&group=false
和 _count
reduce 函数,您要求系统计算索引中的条目总数。因此,您会在您的案例中看到预期结果 5。
group=true
请求仅在每个键级别应用 reduce 函数,而不对所有条目进行最终求和。如您所见,如果对从 group=true
案例中获得的值求和,则最终会得到 group=false
案例中的值:2+2+1 = 5.
如果你发出一个矢量值键,它会变得更加复杂,例如你的地图上写着
emit([doc.field1, doc.field2, doc.field3], 1)
然后您可以使用 group_level=X
在 select 级别对要分组的键中的值的精确数量进行分组。这通常在处理时间序列类型数据时使用,以便能够按年、按月或按天进行分组。这在以下博客中有深入解释-post:
https://console.bluemix.net/docs/services/Cloudant/blog/mapreduce.html
我的映射函数后有以下输出键值对。
["hello"] => 12
["hello"] => 1
["world"] => 23
["world"] => 4
["canada"] => 18
当我使用 __count 作为 reduce 函数时,我得到了 结果 5 如下。 系统计算每一行。
{
"rows": [
{
"key": null,
"value": 5
}
]
}
我再次使用与 __count 相同的地图函数。这次我将 group=true 添加到查询中.我得到以下结果。似乎 reduce 函数适用于每个分组键并计算它们本身。
["hello"] => 2
["world"] => 2
["canada"] => 1
我无法理解这里的机制。为什么系统在有和没有分组的情况下都是这样工作的。如果 reduce 函数适用于 every unique key ,没有分组的结果不应该像下面这样吗?
["hello"] => 1
["hello"] => 1
["world"] => 1
["world"] => 1
["canada"] => 1
使用 reduce=true&group=false
和 _count
reduce 函数,您要求系统计算索引中的条目总数。因此,您会在您的案例中看到预期结果 5。
group=true
请求仅在每个键级别应用 reduce 函数,而不对所有条目进行最终求和。如您所见,如果对从 group=true
案例中获得的值求和,则最终会得到 group=false
案例中的值:2+2+1 = 5.
如果你发出一个矢量值键,它会变得更加复杂,例如你的地图上写着
emit([doc.field1, doc.field2, doc.field3], 1)
然后您可以使用 group_level=X
在 select 级别对要分组的键中的值的精确数量进行分组。这通常在处理时间序列类型数据时使用,以便能够按年、按月或按天进行分组。这在以下博客中有深入解释-post:
https://console.bluemix.net/docs/services/Cloudant/blog/mapreduce.html