带复合键的Couchbase视图:如何设置正确的启动键/结束键范围?

时间:2014-04-05 15:48:26

标签: view couchbase

拥有此文档结构:

"document":{
    "title":"Cheese ",
     "start_date": "2010-02-17T15:35:00",
     "source": "s_source1"
}

我想创建一个视图,返回2个日期和某个来源之间的所有文档ID:

function (doc, meta) {
      emit([doc.start_date,doc.source], null);
}

我尝试使用此范围键获取源码1之间的所有文档" 2014-04-04"和" 2014-04-05":

startkey=["2014-04-04","s_source1"]&endkey=["2014-04-05","s_source1"]

但这不适用于消息来源。它检索日期范围的所有文档,但是检索所有源(s_source1,s_source2,...)。

我想下划线是问题的根源(某些编码问题)?

如何设置我的键范围以仅获取特定日期范围内唯一来源的文档?

1 个答案:

答案 0 :(得分:3)

如果您反转复合键,那么您将能够在Couchbase中从左到右进行选择,键排序。

function (doc, meta) {
  if(meta.type == "json") {
    if(doc.start_date && doc.source) {
      emit([doc.source,dateToArray(doc.start_date)],null);    
    }
  } 
}

要选择源值为“s_source1”的所有文档,从2010年的日期到现在,您的密钥都是这样的:

Start_Key: ["s_source1",[2010,2,18,15,35,0]]
End_key:   ["s_source1",[2014,2,18,15,35,0]]

Couchbase网站上的这个问题对复合键排序有一些很棒的解释,我完全建议你阅读它:http://www.couchbase.com/communities/q-and-a/couchbase-view-composite-keys

另外,这里是官方文档中的信息部分:http://docs.couchbase.com/couchbase-manual-2.0/#selecting-information