2016-09-29 3 views
7

Ich arbeite an einem Projekt, das MongoDB verwendet, aber ich habe noch nie damit gearbeitet. Ich verstehe, dass Sie mit Javascript die Datenbank manipulieren können. Ich habe ein Skript, das einige Felder und fügt einige andere entfernt, aber es funktioniert nicht richtig:MongoDB Felder in Array hinzufügen und entfernen

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

Wenn db.floor.save(doc) heißt, mein Boden gespeichert wird. Alle Kacheln haben jetzt ein Feld namens tileType, aber kein Sensor hat ein Feld namens activated! Alle Sensoren haben immer noch state. Ich weiß nicht, was nicht funktioniert, ich benutze den gleichen Code für die Kachel und für den Sensor. Bitte helfen Sie.


Dies ist die Struktur des Bodens:

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

Was ist Ihr Code ist nicht zu arbeiten? Erhalten Sie einen Fehler in der Konsole? – thanksd

+0

@thanksd Kein Fehler, es speichert nur nicht das neue Feld von Sensor –

+0

Ich denke, die Antwort ist hier http://StackOverflow.com/Questions/7714216/add-new-Field-ToA-Collection-in- mongodb – thanksd

Antwort

7

Per Kommentar von @sumitchoudhary:

Wenn mit if(sensor.state) prüft, überprüft er, ob der Wert von sensor.state truthy ist. Alle meine Sensorzustände sind falsch. Ich komme also nie in die if-Anweisung ... Anders ist es für if(tile.nodeType), denn das hat einen String drin und ist immer truthy (für meine Werte).


Die richtige Kontrolle muss sein:

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. 
} 
Verwandte Themen