我有多个 CouchDB 文档,表示带有属性 userId 和标签的时间戳(用户可以有 n 个时间戳并为每个时间戳分配一个标签)。我想通过特定的 userId 查询 CouchDB 并获取用户使用过的标签的排序列表(按出现次数排序)。
View 会是什么样子?
如果我想获取按出现次数排序的所有标签的列表(无论来自哪个用户),或者如果我假设只有具有相同 userId 的文档,我会这样做:
map :
function(doc) {
if(doc.tag) emit(doc.tag, 1);
}
减少:
function(keys, values) {
return sum(values);
}
但是如何对结果进行分组,以便可以按特定的 userId 过滤查询?
最佳答案
回答我自己的问题。
似乎 CouchDB 支持数组作为键。考虑到这一点,事情就非常简单了:
map :
function(doc) {
if(doc.tag) emit([doc.userId, doc.tag], 1);
}
减少:
function(keys, values) {
return sum(values);
}
然后结果按 userId 和标签排序。
关于CouchDB 查看 SUM 和 GROUP BY 的等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5511810/