我有点愚蠢,在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”之外的所有指定字段都正确地重命名,度量字段保留带空格的原始字段
有什么想法吗?
......更新。
似乎具有“平均Xfer / sec”度量标准的集合已正确重命名为“metric”,但具有“Avg I / O / sec”或“Processor Busy%”的集合不是。我不完全确定为什么会这样。
答案 0 :(得分:3)
这是因为重命名更新正在寻找一个名为'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 );