javascript - 尝试用空格重命名 MongoDB 文档字段

标签 javascript mongodb mongodb-shell

我有点傻,在 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 %”的集合则不然。我不完全确定为什么会这样。

最佳答案

这是因为重命名更新正在查找名为 'myMetric' 的属性进行重命名,而不是名为 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 );

关于javascript - 尝试用空格重命名 MongoDB 文档字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12679950/

相关文章:

javascript - 解决Twilio “Uncaught (in promise) t: Error while setting LastConsumedMessageIndex”错误消息

javascript - 如何使用 ionic 和 Angular 在模式内显示选定的图像名称?

javascript - 何时在 Sequelize promise 中使用 return ?

mongodb - 我如何调试 MongoDB 慢 block 迁移?

node.js - 使用 Mongoskin 通过每个产品的字段描述中的单词查找 MongoDB 文档

javascript - 在 Three.js 中使用 sprite 或 BufferedGeometry 是否性能更高?

mongodb - Meteor 中对象的发布计数

MongoDB $或查询

mongodb - Docker无法连接到mongodb云