2013-06-24 20 views
4

排序鉴于couchbase一个JSON文件,例如,一个里程碑式的集合,它类似于此:限制,并通过不同的属性上couchbase

{ 
    "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上休息的URL。但是,是很新的couchbase,我无法解决如何将视图限制为ret瓮公司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?

谢谢。

回答

5

把公司ID在阵列的开始,因为你会被公司ID限制,couchbase排序由公司ID,然后按日期排列,所以你将永远只能得到一个公司的重要文件

我修改视图发出

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

,然后你就可以查询与

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

认为这是什么曾任职于我..


我回去,并与end key尝试过了,这似乎工作 - 限制和订单的要求:

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

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

或者指定下一个递增/递减值(基于降旗)结尾键,或使用相同的endkey作为startkey并将inclusiveEnd设为真

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

+0

这也是在43之后返回其他公司ID所以如果公司ID 43有3个里程碑并且我要求5,最后两个是42 。 – LocustHorde

+1

啊,对不起,我刚才做了这个;这对我来说足够好,因为我只是在做一些应用程序日志转储,它总是有足够的事件,尽管我应该在应用程序层添加一个检查来滤除它们或者其他东西..我会回去尝试一下并看看我是否可以把它限制到一个组。 – iamserious

+1

这些链接可以帮助你:http://blog.couchbase.com/understanding-grouplevel-view-queries-compound-keys和http://blog.couchbase.com/understanding-letter-ordering-view-queries –