我正在尝试为特定用户获取最近10笔交易。
例如,我有这些文件:
{ "user": 1, "date": 1442408126 }
{ "user": 1, "date": 1442408130 }
{ "user": 1, "date": 1442408140 }
{ "user": 2, "date": 1442408126 }
我定义了这个观点:
// MAP:
function (doc, meta) {
if(meta.type == "json") {
if(doc.user && doc.date) {
var eventKey = dateToArray(new Date(parseInt(doc.date)));
eventKey.unshift(doc.user);
emit(eventKey, {"date":doc.date});
}
}
}
// REDUCE:
function(key, values, rereduce) {
return values.slice(0,10);
}
当reduce=true
和group_level=1
时,这就是结果(这很好):
Key Value
[1] [ { "date": 1442408140 }, { "date": 1442408130 }, { "date": 1442...
[2] [ { "date": 1442408126 } ]
现在,当我使用startKey=[1]
和endKey=[2]
查询视图时(stale = false& startkey =%5B1%5D& endkey =%5B2%5D& group = true& group_level = 1& reduce = true& connection_timeout = 60000& limit = 10& skip = 0),我得到了我想要的行:
Key Value
[1] [ { "date": 1442408140 }, { "date": 1442408130 }, { "date": 1442...
但是,我想使用key = [1]而不进行范围搜索。
当我使用关键参数时(stale = false& group = true& group_level = 1& key =%5B1%5D& reduce = true& connection_timeout = 60000& limit = 10& skip = 0),我得到一个空的结果。
将startKey=[1]
和endKey=[1]
与inclusive_end = true一起使用也会返回一个空列表。
我做错了什么?
答案 0 :(得分:0)
对于Couchbase,相信有一个内置的_count函数可以自动处理rereduce,以便计算结果集中所有项目的计数,而不是减少集合的计数。
可以在文档页面上引用Reduce Functions。
答案 1 :(得分:0)
找到了答案:当使用具有复杂键的视图时,不能在查询中使用“key”参数。在这种情况下,我们必须使用startKey和endKey,而endKey与startKey相同,但最后添加了一个空对象。例如,startKey = [1],endKey = [1,{}]
此处有更多详情:http://ryankirkman.com/2011/03/30/advanced-filtering-with-couchdb-views.html