Couchbase - 使用特定键

时间:2015-09-16 14:37:40

标签: couchbase

我正在尝试为特定用户获取最近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=truegroup_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一起使用也会返回一个空列表。

我做错了什么?

2 个答案:

答案 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