2

我有点笨,在 MongoDB 中创建了一个集合,键名中有空格:

{
        "_id" : ObjectId("5065f84d00ea10c01e00003f"),
        "DateTime" : ISODate("2012-09-27T15:19:00Z"),
        "Port Name" : "CL3-J",
        "Port Number" : "40",
        "Avg I/O /sec" : "2024.0",
        "array_serial" : "xxxxx"
}

我正在尝试在 mongo shell 上定义一个函数来重命名它们:

var metricNames = ["Processor Busy %",
                      "Avg I/O /sec",    
                      "Avg Xfer /sec"];


var renameFields = function(collection) {
  var record = db[collection].findOne({});
  var myMetric;

  for (var key in record) {
    if(metricNames.indexOf(key) !== -1){
      myMetric = metricNames[metricNames.indexOf(key)];
      print(myMetric);
      break;
    } else {
      continue;
    }
  }

  db[collection].update( { }, { $rename : { 
                                            'DateTime'    : 'datetime',
                                            'Port Name'        : 'port_name',
                                            'Port Number'      : 'port_number',
                                            'Adaptor ID'       : 'adaptor_id',
                                            'Processor ID'     : 'processor_id',
                                            'Processor Type'   : 'processor_type',
                                             myMetric          : 'metric' } }, false, true );

}

根据指定的集合,指标可能是三个之一......问题是除了“myMetric”之外的所有指定字段都被正确重命名,指标字段仍然是带有空格的原始字段。

有任何想法吗?


...更新。

似乎具有“Avg Xfer /sec”指标的集合已正确重命名为“metric”,但具有“Avg I/O /sec”或“Processor Busy %”的集合却没有。我不完全确定为什么会这样。

4

1 回答 1

3

这是因为重命名更新正在寻找一个名为'myMetric'to rename 的属性,而不是一个名为myMetric的值。您需要以编程方式构建重命名对象:

var rename = { 
  'DateTime'    : 'datetime',
  'Port Name'        : 'port_name',
  'Port Number'      : 'port_number',
  'Adaptor ID'       : 'adaptor_id',
  'Processor ID'     : 'processor_id',
  'Processor Type'   : 'processor_type'
};
rename[myMetric] = 'metric';
db[collection].update( { }, { $rename : rename }, false, true );
于 2012-10-01T20:22:57.070 回答