2012-04-13 30 views
3

我有包含'date'和'group'字段的文檔。這是我的看法:需要一個CouchDB技巧按日期進行排序並按組篩選

byDateGroup: { 
    map: function(doc) { 
    if (doc.date && doc.group) { 
     emit([doc.date, doc.group], null); 
    } 
    } 
} 

會是什麼這相當於查詢:

select * from docs where group in ("group1", "group2") order by date desc 

這種簡單的解決方案是不進入我的頭。 ?:(

回答

1

潘卡,請將您發出的按鍵順序切換爲:

emit([doc.group, doc.date], doc); 

然後,您可以在查詢視圖時傳入開始鍵和結束鍵。對於要爲其提供數據的每個組執行單獨查詢可能會更容易。數據將按日期排序。

我現在正在出路,但如果不清楚,我可以詳細說明。

+0

+1這似乎是最好的解決方案。從根本上講,Jangid要求加入,因此多重請求和「加入」客戶可能是最直接的事情。 – JasonSmith 2012-04-18 13:16:23

+0

同意。這是目前最好的方法。除了@JasonSmith所說的之外,你還可以在_list函數中進行額外的過濾。在任何情況下,CouchDB都將「自動排序」所有日期鍵(時間戳或日期數組)。 「困難部分」只是從索引中挑選出特定的組。 – BigBlueHat 2012-05-25 20:15:54

0

爲什麼不

function(doc) { 
    if (doc.date && ["group1", "group2"].indexOf(doc.group) !== -1)) { 
    emit([doc.date, doc.group], null); 
    } 
} 
0

你需要爲這個特定的觀點:與查詢descending=true

byDateGroup1Group2: { 
    map: function(doc) { 
    if (doc.date && doc.group && (doc.group === "group1" || doc.group === "group2") { 
     emit(doc.date, doc); 
    } 
    } 
} 

您查詢(大概在列表功能)