使用Map和Reduce进行分组

Ale*_*lex 1 couchdb mapreduce

我有一些文件的"状态"字段为"绿色","红色","琥珀色".

我确信可以使用MapReduce来生成包含三个键(每个状态一个)的分组响应,每个键的值包含具有该键的所有文档的数组.但是,我正在努力研究如何使用re(reduce)函数.

地图功能:

function(doc) {
  emit(doc.status, doc);
}
Run Code Online (Sandbox Code Playgroud)

减少功能:???

Rob*_*son 5

这不是一个旨在解决的问题; CouchDB中的reduce用于聚合.

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

地图:

function(doc) {
  for (var i in doc.status) {
    emit(doc.status[i], null);
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以找到所有状态为绿色的文档;

/_design/foo/_view/bar?key="Green"&include_docs=true
Run Code Online (Sandbox Code Playgroud)

这将返回具有该状态的所有文档的列表.如果您希望在单个查询中找到多个状态的文档,请使用带有此表单正文的http POST;

{"keys":["Green", "Red"]}
Run Code Online (Sandbox Code Playgroud)

HTH,B