如何在Mongodb Mapreduce中使用范围变量作为属性名称

时间:2013-08-26 10:14:07

标签: javascript mongodb mapreduce

question (and answer)处理一般情况。我很难将范围变量用作字段键(而不是字段值)

在下面的示例中,所有FULLY_CAPS字段都是范围变量。对于SERVICE和IDENTIFIER,emit在传递给M / R时正确使用了scope变量的值。

但是,当我尝试将范围变量的值用作发出文档中的键时,将使用范围变量名称(而不是其值)创建文档。

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

有解决这个问题的方法吗?

1 个答案:

答案 0 :(得分:2)

使用快捷语法在JavaScript中创建对象时,左侧/属性名称始终被解释为文字值,而不管引号如何。

例如:

var d={ name: "Aaron" }

相当于:

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

由于有两种方法可以设置属性值:

  1. obj.propertyName=value
  2. obj["propertName"]=value
  3. 您必须使用第二种语法构建对象,至少部分是这样。

    var errors={
          count: 1,
          type_breakdown: { }
          }
        };
    var countObj={ count:1 };
    errors.type_breakdown[SINGLES_ONLY]=countObj;
    
    // pass results to emit call