2012-10-01 22 views
2

我是有點啞,創造了在關鍵的名稱用空格MongoDB中收集的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" 
} 

我試圖確定在蒙戈外殼的功能重新命名其中:

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%」的集合卻沒有。我不完全確定這是爲什麼。

+0

關鍵名稱中的空格有什麼問題? – cirrus

+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);