【问题标题】:MongoDB adding and removing fields in arrayMongoDB在数组中添加和删除字段
【发布时间】:2017-02-07 22:07:50
【问题描述】:

我正在开发一个使用 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);
});

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")

}

【问题讨论】:

  • 你的代码不工作怎么办?您是否在控制台中收到错误消息?
  • @thanksd 没有错误,只是没有保存传感器的新字段
  • 我想答案就在这里stackoverflow.com/questions/7714216/…
  • @J.Kamans 根据您的样本数据。没有具有真值的状态,这就是为什么您的 if 部分不更新新字段的原因。
  • @sumitchoudhary:cmets 部分适用于 cmets。如果您有问题的答案,请将其作为答案发布。当然不要要求那些发布答案的人将他们的答案转换为 cmets(?!)。谢谢。

标签: javascript mongodb mongodb-query


【解决方案1】:

根据@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.
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多