CouchDB 为行键返回无(减少功能)

Posted

技术标签:

【中文标题】CouchDB 为行键返回无(减少功能)【英文标题】:CouchDB Returning None for Row Key (reduce function) 【发布时间】:2017-08-30 00:05:36 【问题描述】:

我有一个 map 函数和 reduce 函数来计算一个键的所有出现次数。 CouchDB 2.0设计文档的代码如下:

地图功能

function(doc)  emit(doc.domainID, 1); 

归约函数

_sum

这是浏览器显示的快照:

这是我在 Python 中运行以下代码时的结果:

import couchdb
couch = couchdb.Server("http://localhost:5984/")    
counts = couch['event_db'].view('doc/eventbydomainid',
                                 reduce=True, descending=True)

打印键和值时的终端结果

我期待以下结果,但没有看到:

"ad1": 32, "ad2": 1

任何帮助将不胜感激。

谢谢,

布赖恩

【问题讨论】:

【参考方案1】:

当您使用缩减函数时,默认行为是将整个数据集缩减为单个值。如果您想要分组,请将group=true 添加到您的请求中。 (documentation)

虽然您没有特别询问这个问题,但您在 CouchDB 中使用 map/reduce 时无疑会遇到它。如果您要发出复杂的键(例如:数组),您可以使用group_level 参数从左到右按数组的各个部分进行分组。 (example)

这里一个有趣的用例是将日期作为数组发出,例如:[2017, 8, 29, 22, 59, 16]。使用group_level=1 将按年分组,group_level=2 将按年+月分组,依此类推。 (专业提示:使用group_level 将隐式设置group=true

【讨论】:

非常感谢多米尼克!这是我一直在寻找的解决方案。 您能否推荐我如何根据开始或结束文档 ID 获取计数?提前致谢! 我相信您可以通过 startkey_docidendkey_docid 参数来做到这一点。 (documentation) 好的,很好。我会试试看的!

以上是关于CouchDB 为行键返回无(减少功能)的主要内容,如果未能解决你的问题,请参考以下文章

从 couchapp 自定义登录 couch.log?

Sqoop2 Hbase 导入:无法为行键列插入具有空值的行

在代码存储库中存储 couchDB 视图

如何使用 Jquery 和 CouchDb 创建 SIGN UP 和 LOG IN?

是否有 jquery.couch.js 的文档? [关闭]

CouchDB:在 CouchApp 中通过 http 请求获取服务器时间