2017-05-31 48 views
0

我有一個要求,過濾週期爲例子的基礎上,一些記錄讓我所有的產品數201704和201705.之間如何使用startkey和endkey查詢雲中的視圖,其中key中有兩個元素?

所以我EMIT是一樣的東西:

emit([doc.productId, doc.period],1) 

,並減少使用的_count 。但是當我試圖在startkey和endkey上過濾時,它給了我所有的記錄。我想是這樣的:

startkey=["201604"]&endkey=[{},"201605"] 

在我的關鍵結構是一樣的東西的關鍵:

[ 
"aws-60826348802", 
201703 
] 

我不想扭轉關鍵元素的順序,因爲我想通過對ID的計數定義group_level=1。任何人都可以幫助我。我還沒有得到任何解決方案。

回答

1

爲了能夠選擇(使用startkey/endkey),您的索引需要在的順序。比方說,你的文檔看起來像這樣:

{ 
    "_id": "someid", 
    "product": "aws-60826348802", 
    "date": "201604", 
    "price": 42.42 
} 

您可以創建一個映射函數索引按日期順序排列的文件,像這樣:

function(doc) { 
    emit([doc.date, doc.product], doc.price); 
} 

您現在有一個兩維鍵(日期&產品代碼),價值就是價格。

這允許您按日期選擇項目:

?startkey=["201604"] // find items where the date is >= 201604 
?startkey=["201604"]&endkey=["201605"] // find items in April 2016 

如果你選擇了減速機(_count,_sum,或_stats),還可以執行彙總:

?startkey=["201601"]&endkey=["201701"]&group_level=1 // find items in 2016, group by month 
?startkey=["201601"]&endkey=["201701"]&group_level=2 // find items in 2016, grouped by month and product code 

這可以讓你例如,每月的產品銷售總額。

+0

@ Glynn感謝您的迴應,但我想要的是在兩個月的範圍內獲得產品總數,爲此我必須將productid作爲第一個關鍵字和第二個關鍵點。如果我反轉鍵元素,它會給我特定月份的產品數量。希望我能解釋我的問題.. – MayankMike

相關問題