4

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

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

如果我要选择公司的所有里程碑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);
  }
}

我确实在休息网址上同时获得了日期和公司 ID。但是,对于 couchbase 来说,我还是很陌生,我无法弄清楚如何限制视图以仅返回公司的里程碑43

返回键与此类似:

"key":[2013,6,19,16,11,25,14]

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

我尝试过的查询参数是:

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

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

谢谢。

4

1 回答 1

5

将公司 id 放在数组的开头,因为您将受到公司 id 的限制,所以 couchbase 按公司 id 排序,然后按日期数组排序,因此您只会获得一家公司的里程碑文件

我会修改视图以发出

emit([doc.copmanyId, eventKey], null);

然后你可以查询视图

&descending=true&startkey=[43,{}]

这是以前对我有用的..


我回去用结束键尝试了它,这似乎有效 - 根据需要限制和命令:

&descending=true&startkey=[43,{}]&endkey=[42,{}]

或者

&descending=true&startkey=[43,{}]&endkey=[43,{}]&inclusive_end=true

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

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

于 2013-06-24T10:59:27.797 回答