我有点傻,在 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/