CouchDB查看等效的SUM&通过...分组

时间:2011-04-01 09:59:36

标签: couchdb

我有多个CouchDB文档,表示带有属性userId和tag的时间戳(用户可以有n个时间戳并为每个时间戳分配一个标记)。我想通过特定的userId查询CouchDB,并获取用户已使用的标签的排序列表(按出现次数排序)。

视图如何?

如果我想获得按事件排序的所有标签的列表(无论来自哪个用户),或者如果我假设只有具有相同userId的文档,我会这样做:

地图

function(doc) {
  if(doc.tag) emit(doc.tag, 1); 
}

减少

function(keys, values) {
  return sum(values);
}

但是如何对结果进行分组,以便我可以按特定的userId过滤查询?

1 个答案:

答案 0 :(得分:8)

回答我自己的问题。

似乎CouchDB支持数组作为键。考虑到这一点,它非常简单:

<强>地图

function(doc) {
  if(doc.tag) emit([doc.userId, doc.tag], 1); 
}

<强>减少

function(keys, values) {
  return sum(values);
}

然后,结果按userId&amp;进行排序。标签