0
我在CouchDB 1.6.1的類別中有數字數據。CouchDB:有條件地將Map/Reduce輸出中的值更改爲負
的文件將是這個樣子:
{
category1: "xxx",
category2: "yyy",
category3: "zzz",
value1: 20
}
{
category1: "xxx",
category2: "bbb",
category3: "ccc",
value1: 20
}
{
category1: "xxx",
category2: "lll",
category3: "mmm",
value1: 10
}
的Map/Reduce函數:
function(doc)
emit([doc.category1, doc.category2, doc.category3], value1)
reduce: _sum
組1級將給予總額的50(20 + 20 + 10)
我希望實現的是將value1轉換爲負數,如果說category3 ==='mmm'。然後
組級別1將給出答案30(20 + 20 +( - 10))
我曾嘗試以下映射函數:
function(doc)
if(doc.category3 === 'mmm'){
doc.value1 = doc.value1 * -1; //(or, doc.value1 = -doc.value1)
emit([doc.category1, doc.category2, doc.category3], value1)
reduce: _sum
結果:沒有輸出。
我也試過:
function(doc)
var x = doc.value1;
if(doc.category3 === 'mmm'){
-Math.abs(x);
emit([doc.category1, doc.category2, doc.category3], x)
reduce: _sum
結果:錯誤:無效的值。
和:
function(doc)
var x = doc.value1;
if(doc.category3 === 'mmm'){
-Math.abs(x);
emit([doc.category1, doc.category2, doc.category3], value1)
reduce: _sum
結果:完全不正確的答案。
對不起,我知道這是一個簡單的問題,但我現階段無法找到答案。
請問我可否指點正確的方向?
工作得很好。 「x =(-1 * Math.abs(x));」是我沒有正確的。再次,非常感謝。 – jlb333333