couchbase上不同属性的限制和排序

couchbase上不同属性的限制和排序,couchbase,Couchbase,给定couchbase上的JSON文档,例如里程碑集合,类似于: { "milestoneDate" : /Date(1335191824495+0100)/, "companyId" : 43, "ownerUserId": 475, "participants" : [ { "userId": 2, "docId" : "132546" }, {

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

{
    "milestoneDate" : /Date(1335191824495+0100)/,
    "companyId" : 43,
    "ownerUserId": 475,
    "participants" : [
        {
            "userId": 2,
            "docId" : "132546"
        },
        {
            "userId": 67,
            "docId" : "153"
        }
    ]
}
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);
  }
}
"key":[2013,6,19,16,11,25,14]
如果我要选择公司的所有里程碑
43
,并想先按最新日期订购。。我对couchbase的看法与此类似:

{
    "milestoneDate" : /Date(1335191824495+0100)/,
    "companyId" : 43,
    "ownerUserId": 475,
    "participants" : [
        {
            "userId": 2,
            "docId" : "132546"
        },
        {
            "userId": 67,
            "docId" : "153"
        }
    ]
}
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);
  }
}
"key":[2013,6,19,16,11,25,14]
我确实在rest URL上获得了日期和公司Id。。但是,由于对couchbase非常陌生,我无法解决如何将视图限制为仅返回公司的里程碑
43

返回键与此类似:

{
    "milestoneDate" : /Date(1335191824495+0100)/,
    "companyId" : 43,
    "ownerUserId": 475,
    "participants" : [
        {
            "userId": 2,
            "docId" : "132546"
        },
        {
            "userId": 67,
            "docId" : "153"
        }
    ]
}
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);
  }
}
"key":[2013,6,19,16,11,25,14]
其中最后一个元素(
14
)是公司id。。这显然是错误的

我尝试过的查询参数有:

  • &descending=true&startkey=[{},43]
  • &descending=true&startkey=[{},43]&endKey=[{},43]
  • 尝试将companyId添加到
    值中,但无法按值限制返回结果
根据couchbase文档,我需要开始时的日期部分来对它们进行排序。我现在如何通过公司id限制它们


谢谢。

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

我将修改视图以发射

emit([doc.copmanyId, eventKey], null);
然后,您可以使用

&descending=true&startkey=[43,{}]
这就是以前对我有用的东西


我回去试了试,这似乎很有效-根据需要限制和命令:

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

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


这两种选择都应该很好。(我只测试了
endkey=42的那一个
,但它们应该都能工作)

这也是在43之后返回其他公司ID。。所以,如果ID43公司有3个里程碑,而我要求的是5个,那么最后两个是42个里程碑中的一个;这对我来说已经足够好了,因为我只是在做一些应用程序日志转储,它总是有足够的事件。。虽然我应该在应用程序层上添加一个检查来过滤掉它们或其他东西。。我将返回并尝试一下,看看是否可以将其限制为一个组。可能这些链接将帮助您:“&descending=true&startkey=[43,{}]&endkey=[43,{}]&inclusive_end=true”现在对3.0版不起作用,只要开始键和结束键相同,查询就不会返回任何内容。你知道这是否已经改变了吗?@SumitJain我们的couchbase有很多问题;修理一个坏掉的东西。所以我们把它从堆栈中删除了。。并用elasticsearch取代它-从那时起,我们就没有任何问题了。。不幸的是,(或幸运的是),从那时起我就没有看过couchbase了!