Couchdb 使用Map和Reduce进行分组

Couchdb 使用Map和Reduce进行分组,couchdb,mapreduce,Couchdb,Mapreduce,我有一些“状态”字段为“绿色”、“红色”、“琥珀色”的文档 我确信可以使用MapReduce生成一个包含三个键(每个状态一个键)的分组响应,每个键都有一个值,该值包含一个包含该键的所有文档的数组。然而,我正在努力学习如何使用re(reduce)函数 地图功能: function(doc) { emit(doc.status, doc); } Reduce函数:???一般来说,您不会使用Reduce函数来获取文档列表。reduce意味着获取一个列表,并将其缩减为单个值。事实上,reduce值

我有一些“状态”字段为“绿色”、“红色”、“琥珀色”的文档

我确信可以使用MapReduce生成一个包含三个键(每个状态一个键)的分组响应,每个键都有一个值,该值包含一个包含该键的所有文档的数组。然而,我正在努力学习如何使用re(reduce)函数

地图功能:

function(doc) {
  emit(doc.status, doc);
}

Reduce函数:???

一般来说,您不会使用Reduce函数来获取文档列表。reduce意味着获取一个列表,并将其缩减为单个值。事实上,reduce值的大小无论如何都有一个上限,使用整个文档将触发
reduce\u溢出
错误。减少的示例包括计数、总和、平均值等。请继续使用map查询,您将按照
状态
值对值进行整理和排序


另一方面,可能是不相关的,我不会用您的视图发布文档。您只需使用
include_docs
view查询参数,即可达到同样的效果,同时节省磁盘空间。取舍是,在内部,必须逐个检索文档。(但是由于它们已经被
\u id
索引了,所以通常差别可以忽略。

一般来说,您不会使用reduce函数来获取文档列表。reduce意味着获取一个列表,并将其缩减为单个值。事实上,reduce值的大小有一个上限,并且使用entire文档将触发
reduce\u溢出
错误。reduce的示例包括计数、总和、平均值等。请坚持map查询,您将按照
状态
值对值进行整理和排序


另一个可能不相关的注意事项是,我不会将文档与您的视图一起发送。您只需使用
include_docs
view查询参数,即可实现相同的效果,同时在过程中节省磁盘空间。折衷是,在内部必须逐个检索文档。(但是由于它们已经被
\u id
索引了,所以通常差别可以忽略。

这不是reduce想要解决的问题;CouchDB中的reduce是用于聚合的

如果我理解正确,你想要这个

地图:

然后,您可以找到所有状态为绿色的单据

/_design/foo/_view/bar?key="Green"&include_docs=true
这将返回具有该状态的所有文档的列表。如果您希望在单个查询中查找具有多个状态的文档,请将http POST与此表单正文一起使用

{"keys":["Green", "Red"]}
嗯,,
B.

这不是reduce想要解决的问题;CouchDB中的reduce用于聚合

如果我理解正确,你想要这个

地图:

然后,您可以找到所有状态为绿色的单据

/_design/foo/_view/bar?key="Green"&include_docs=true
这将返回具有该状态的所有文档的列表。如果您希望在单个查询中查找具有多个状态的文档,请将http POST与此表单正文一起使用

{"keys":["Green", "Red"]}
嗯,,
B.

+1.CouchDB喜欢高列表,而不是胖列表。如果您查询
?reduce=false&key=“Green”
,您已经有了一个“绿色”文档数组。这将为您提供一个文档数组(加上一些其他数据,您可以忽略这些数据,或者使用_list函数删除这些数据).?include_docs=true引入了一种竞争条件,在coach从磁盘读取视图行的时间和它从磁盘返回读取文档的时间之间,文档可以发生变化。文档可以在这短暂的时间内发生变化。但我认为绝大多数应用程序都需要担心更大的事情。+1.CouchDB喜欢高列表,而不是胖列表列表。如果您查询
?reduce=false&key=“Green”
,您已经有了一个“绿色”文档数组。这将为您提供一个文档数组(加上一些其他数据,您可以忽略这些数据,或使用_list函数删除这些数据).?include_docs=true引入了一种竞争条件,在这一条件下,文档可以在coach从磁盘读取视图行的时间和它返回从磁盘读取文档的时间之间进行更改。文档可以在这短暂的时间内进行更改。但我认为绝大多数应用程序都有更大的问题需要担心。