2016-09-29 26 views
7

我正在使用MongoDB的項目,但我從來沒有使用它。 我明白,通過使用JavaScript,你可以操縱數據庫。我做了一個腳本,刪除某些領域,並增加了一些人,但它不能正常工作:MongoDB添加和刪除數組中的字段

db.floor.find({_id:"003"}).forEach(function(doc) { // Find floor with id = 003. 

    var tiles = doc.tiles; // Get tiles from floor. 

    for(var i = 0; i < tiles.length; i++){ // Loop through tiles. 
     var tile = tiles[i]; // Get tile at index i. 
     if (tile.nodeType){ // If tile has a field "nodeType", 
      tile.tileType = tile.nodeType; // add a field "tileType" 
      delete tile.nodeType; // and delete the "nodeType" field. 
     } 

     // THIS CODE BELOW IS NOT WORKING 
     var sensors = tile.sensors; // Get sensors of tile. 
     for(var j = 0; j < sensors.length; j++){ // Loop through sensors. 
      var sensor = sensors[j]; // Get sensor at index j. 
      if (sensor.state){ // If sensor has a field "state", 
       sensor.activated = sensor.state; // add a field "activated" 
       delete sensor.state; // and delete the "state" field. 
      } 
     } 
    } 
    db.floor.save(doc); 
}); 

db.floor.save(doc)被調用時,我的地板被保存。所有瓷磚現在都有一個名爲tileType的字段,但沒有傳感器具有名爲activated的字段!所有傳感器仍然有state。我不知道什麼是不工作,我使用相同的代碼爲瓷磚和傳感器。請幫忙。


這是地板的結構:

{ 
"_id" : "003", 
"_class" : "nl.kamans.Floor", 
"name" : "FloorDemo", 
"tiles" : [ 
    { 
     "_id" : "035", 
     "sensors" : [ 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      } 
     ], 
     "x" : 0, 
     "y" : 0, 
     "batteryVoltage" : 0, 
     "orientation" : "NORTH", 
     "nodeType" : "WIRELESS" 
    }, 
    { 
     "_id" : "042", 
     "sensors" : [ 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      } 
     ], 
     "x" : 1, 
     "y" : 0, 
     "batteryVoltage" : 0, 
     "orientation" : "NORTH", 
     "nodeType" : "WIRELESS" 
    }, 
    { 
     "_id" : "049", 
     "sensors" : [ 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      } 
     ], 
     "x" : 2, 
     "y" : 0, 
     "batteryVoltage" : 0, 
     "orientation" : "NORTH", 
     "nodeType" : "WIRELESS" 
    }, 
    { 
     "_id" : "007", 
     "sensors" : [ 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      } 
     ], 
     "x" : 3, 
     "y" : 0, 
     "batteryVoltage" : 0, 
     "orientation" : "NORTH", 
     "nodeType" : "WIRELESS" 
    }, 
    { 
     "_id" : "029", 
     "sensors" : [ 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      } 
     ], 
     "x" : 0, 
     "y" : 1, 
     "batteryVoltage" : 0, 
     "orientation" : "NORTH", 
     "nodeType" : "WIRELESS" 
    }, 
    { 
     "_id" : "021", 
     "sensors" : [ 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      } 
     ], 
     "x" : 1, 
     "y" : 1, 
     "batteryVoltage" : 0, 
     "orientation" : "NORTH", 
     "nodeType" : "WIRELESS" 
    }, 
    { 
     "_id" : "014", 
     "sensors" : [ 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      }, 
      { 
       "state" : false, 
       "ignored" : false 
      } 
     ], 
     "x" : 2, 
     "y" : 1, 
     "batteryVoltage" : 0, 
     "orientation" : "NORTH", 
     "nodeType" : "WIRELESS" 
    } 
], 
"height" : 1, 
"width" : 3, 
"defined" : true, 
"lastUpdate" : ISODate("2016-09-29T13:26:40.866Z") 

}

+0

什麼?你在控制檯中遇到錯誤嗎? – thanksd

+0

@thanksd沒有錯誤,它只是不保存傳感器的新領域 –

+0

我認爲答案在這裏http://stackoverflow.com/questions/7714216/add-new-field-to-a-collection-in- mongodb – thanksd

回答

7

每@sumitchoudhary的評論:

if(sensor.state)檢查,其檢查的sensor.state值truthy。我所有的傳感器狀態都是假的。所以我從來沒有進入if語句......它與if(tile.nodeType)不同,因爲它有一個字符串,並且總是真的(對於我的值)。


正確檢查必須是:

你的心不是代碼工作
if ("state" in sensor) 
{ 
    // If sensor has a field "state", 
    sensor.activated = sensor.state; // add a field "activated" 
    delete sensor.state; // and delete the "state" field. 
} 
相關問題