MongoDB在数组中添加和删除字段

J. *_*ans 8 javascript mongodb mongodb-query

我正在开发一个使用MongoDB的项目,但我从未使用它.我明白通过使用javascript,你可以操纵数据库.我创建了一个删除一些字段并添加其他字段的脚本,但它无法正常工作:

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);
});
Run Code Online (Sandbox Code Playgroud)

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")
Run Code Online (Sandbox Code Playgroud)

}

J. *_*ans 7

根据@sumitchoudhary的评论:

检查时if(sensor.state),它会检查值sensor.state是否真实.我所有的传感器状态都是假的.所以我从来没有进入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.
}
Run Code Online (Sandbox Code Playgroud)