2013-06-24 45 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 –