2013-08-26 15 views
0

有一個question (and answer)處理一般情況。我很難使用作用域變量作爲字段鍵(與字段值相反)如何使用作用域變量作爲屬性名稱在一個Mongo Map/Reduce中發射

在下面的示例中,所有FULLY_CAPS字段都是作用域變量。在SERVICE和IDENTIFIER的情況下,發送正確地使用範圍變量的值,因爲它被傳遞給M/R。

但是,當我嘗試使用範圍變量的值作爲發出文檔中的鍵時,文檔是使用範圍變量名稱(而不是其值)來創建的。

return emit({ 
    service: SERVICE, 
    date: _this.value.date, 
    identifier: _this.value[IDENTIFIER] 
    }, { 
    errors: { 
     count: 1, 
     type_breakdown: { 
     SINGLES_ONLY: { 
      count: 1 
     } 
     } 
    } 
    }); 

是否有解決此問題的方法?

+0

我是JavaScript noob,所以這可能是一個簡單的JavaScript事情。 –

+1

這是一個JS的東西,雖然它不是很容易修復,但它是JS的工作方式,最好的方法是不要像這樣按需構建文檔,而是要慢慢地形成它,以便讓這些變量的可能性由JS引擎正確使用 – Sammaye

回答

2

在JavaScript中使用快捷語法創建對象時,左側/屬性名稱始終被解釋爲文字值,而不管引號如何。

例如:

var d={ name: "Aaron" } 

等同於:

var d={ "name" : "Aaron" } 

由於有兩種方法來設置屬性值:

  1. obj.propertyName=value
  2. obj["propertName"]=value

您必須使用第二種語法(至少部分)構造您的對象。

var errors={ 
     count: 1, 
     type_breakdown: { } 
     } 
    }; 
var countObj={ count:1 }; 
errors.type_breakdown[SINGLES_ONLY]=countObj; 

// pass results to emit call 
相關問題