在couchbase上对不同属性进行限制和排序

Loc*_*rde 4 couchbase

给出一个关于couchbase的JSON文档,例如,里程碑集合,类似于:

{
    "milestoneDate" : /Date(1335191824495+0100)/,
    "companyId" : 43,
    "ownerUserId": 475,
    "participants" : [
        {
            "userId": 2,
            "docId" : "132546"
        },
        {
            "userId": 67,
            "docId" : "153"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

如果我要选择公司的所有里程碑43并希望最先订购它们......我在couchbase上的观点与此类似:

function (doc, meta) {
  if(doc.companyId && doc.milestoneDate)
  {
    //key made up of date particles + company id
    var eventKey = dateToArray(new Date(parseInt(doc.milestoneDate.substr(6))));
    eventKey.push(doc.companyId);

    emit(eventKey, null);
  }
}
Run Code Online (Sandbox Code Playgroud)

我确实得到了两个日期和公司ID在休息网址上..然而,对于couchbase而言,我很难解决如何限制视图以仅返回公司的里程碑 43

返回键类似于:

"key":[2013,6,19,16,11,25,14]
Run Code Online (Sandbox Code Playgroud)

最后一个元素(14)是公司ID ..这显然是错误的.

我尝试过的查询参数是:

  • &descending=true&startkey=[{},43]
  • &descending=true&startkey=[{},43]&endKey=[{},43]
  • 尝试添加companyId value但无法按值限制返回结果.

根据couchbase文档,我需要在开始时对日期部分进行排序.我现在如何通过公司ID限制它们?

谢谢.

iam*_*ous 5

将公司ID放在数组的开头,并且因为你将受到公司ID的限制,所以couchbase按公司ID排序,然后按日期数组进行排序,这样你就只能得到一家公司的里程碑文件

我修改了要发出的视图

emit([doc.copmanyId, eventKey], null);
Run Code Online (Sandbox Code Playgroud)

然后你可以查询视图

&descending=true&startkey=[43,{}]
Run Code Online (Sandbox Code Playgroud)

这对我以前有用..


我回去尝试使用结束键,这似乎工作 - 根据需要限制和命令:

&descending=true&startkey=[43,{}]&endkey=[42,{}]
Run Code Online (Sandbox Code Playgroud)

要么

&descending=true&startkey=[43,{}]&endkey=[43,{}]&inclusive_end=true
Run Code Online (Sandbox Code Playgroud)

要么使用结束键指定下一个递增/递减的值(基于降序标记),要么使用相同的endkeyas startkey并设置inclusiveEnd为true

这两个选项都应该可以正常工作.(我只测试了那个,endkey=42但他们都应该工作)