我有多个CouchDB文档,表示带有属性userId和tag的时间戳(用户可以有n个时间戳并为每个时间戳分配一个标记).我想通过特定的userId查询CouchDB,并获取用户已使用的标签的排序列表(按事件排序).
视图怎么样?
如果我想获得按事件排序的所有标签的列表(无论来自哪个用户),或者如果我假设只有具有相同userId的文档,我会这样做:
地图:
function(doc) {
if(doc.tag) emit(doc.tag, 1);
}
Run Code Online (Sandbox Code Playgroud)
降低:
function(keys, values) {
return sum(values);
}
Run Code Online (Sandbox Code Playgroud)
但是如何对结果进行分组以便我可以按特定的userId过滤查询?
回答我自己的问题.
好像CouchDB支持数组作为键.考虑到这一点,它非常简单:
地图:
function(doc) {
if(doc.tag) emit([doc.userId, doc.tag], 1);
}
Run Code Online (Sandbox Code Playgroud)
降低:
function(keys, values) {
return sum(values);
}
Run Code Online (Sandbox Code Playgroud)
然后,结果按userId&tag排序.