2016-09-29 21 views
7

MongoDB kullanan bir proje üzerinde çalışıyorum, ancak daha önce hiç çalışmamıştım. Javascript kullanarak veritabanını değiştirebileceğinizi anlıyorum. Bazı alanları kaldırır ve bazı diğerleri ekler bir komut dosyası yapılmış, ancak düzgün çalışmıyor:MongoDB dizideki alanları ekleme ve çıkarma

db.floor.save(doc) denir
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); 
}); 

, benim zemin kaydedilir. Artık tüm karoların tileType adında bir alanı var, ancak sensörde activated adında bir alan yok! Tüm sensörler hala state var. Ne çalışmadığını bilmiyorum, döşeme ve sensör için aynı kodu kullanıyorum. Lütfen yardım et.


Bu kat yapısı şöyledir:

{ 
"_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

Ne kod isnt çalışma hakkında:


sağ çek olması gerekiyor? Konsolda bir hata mı alıyorsunuz? – thanksd

+0

@thanksd Hata yok, sadece sensörün yeni alanını kaydetmiyor –

+0

Bence cevap burada. Http://stackoverflow.com/questions/7714216/add-new-field-to-a-collection-in- mongodb – thanksd

cevap

7

@sumitchoudhary ait Başına yorum: if(sensor.state) ile kontrol ederken sensor.state değeri truthy ise

, bu denetler. Tüm sensör durumlarım yanlış. Bu yüzden hiç if deyimine giremiyorum ... if(tile.nodeType) için farklıdır, çünkü içinde bir String vardır ve her zaman doğrudur (değerlerim için).

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. 
} 
İlgili konular