我有一個地圖縮小的視圖設置。眼下這段代碼的偉大工程:couchdb地圖/減少按日期過濾多個按鍵
function(doc) {
if (doc.type == 'test'){
if(doc.trash != 1){
for (var id in doc.items) {
emit([id,doc.items[id].name], 1);
}
}
}
}
function(keys,prices){
return (keys, sum(prices));
}
我獲得回報,並使用該組參數時,它凝聚一切就好了。
我的問題/問題,我想添加第三個鍵....日期,所以我可能只會減少某些日期的記錄。因此,例如:
function(doc) {
if (doc.type == 'test'){
if(doc.trash != 1){
for (var id in doc.items) {
emit([date,id,doc.items[id].name], 1);
}
}
}
}
我的問題是,由於日期是在數組的開始,按日期減少羣體,ID等。我知道我用group_level說只是把該數組中的第一個鍵或前2個鍵,但這並不能幫助,因爲afaik,group_level在數組中從左到右。我可以把日期放在發射數組的末尾,但這也沒有幫助,因爲我需要在我的startkey和endkey的開頭搜索值。
下面是數據輸出的例子:
{"key":["2012-03-13","356752b8a5f6871f3","Apple"],"value":1},
{"key":["2012-03-20","123752b8a76986857","Pear"],"value":1},
{"key":["2012-04-12","3013531de05871194","Grapefruit"],"value":1},
{"key":["2012-04-12","356752b8a5f6871f3","Apple"],"value":1},
我想在一行中添加APPLE起來,在這裏它是由日第一加起來蘋果。如果我刪除DATE作爲數組中的第一個鍵,但我無法按日期範圍進行搜索,所以我能夠成功將所有蘋果加起來。
有關如何完成此任何想法?
主要問題是我需要按日期範圍進行搜索。我無法過濾id,或名稱或任何其他字段,因爲我想在特定日期內返回所有記錄。我的問題是,如果我把date作爲開始和結束鍵中的第一個參數,它會導致一個問題。爲什麼?因爲然後映射/減少分組和減少日期(不好)。我需要它通過ID分組。例如。我有一份水果名單......蘋果,葡萄柚,梨。水果每天都要多次購買。我想過濾一個日期範圍,並在給定的一天中獲取蘋果總數等。 +++ _sum建議 – Matt
更新了我的答案。我在生產應用程序中完成了這件事,我們每天都會使用它來進行分析。我確定它確實有效。希望這可以幫助。 – wallacer
我想我說ID是有點誤導。這裏的id不是唯一的,而是使用單詞類型。我的問題是,當你使用group和reduce時,是不是按DATE分組,然後按Type?例如,我有這個:emit([doc.ss_date,ss_type,doc.ss.name],1);減少不是首先按日期減少嗎?所以它只能說明Jun 25上的所有蘋果?而不是日期範圍內的所有蘋果?我想搜索說一週的價值記錄,並獲得一個範圍內的所有蘋果的總數。組2/3從數組中的第一個鍵(日期)開始,而不是reduce中的第二個鍵。 – Matt