【问题标题】:Need to update existing schema for all documents需要更新所有文档的现有架构
【发布时间】:2020-02-28 15:25:01
【问题描述】:

我正在为已保存记录的数据库更新架构。如何添加额外的字段-“deviceAccess”,默认为“false”

现有架构:

deviceId: "03",
    switches:[
        {
            _id: '03',
            switchesID:'03',
            switchName:'Laptop'
        }
    ]

我想要的架构:

deviceId: "03",
    switches:[
        {
            _id: '03',
            switchesID:'03',
            switchName:'Laptop',
            deviceAccess: 'False'
        }
    ]


我希望所有现有的设备都这样!请帮忙!

【问题讨论】:

    标签: node.js database mongodb mongoose


    【解决方案1】:

    编写迁移脚本以更新集合中的所有文档:

    使用 npm 包 mongodb-migrate 执行此操作:

    安装它:

    npm install mongodb-migrate
    

    脚本:

    var mongodb = require('mongodb');
    
    exports.up = function(db, next){
        const your_collection = db.collection("your_collection_name");
    
        yout_collection.update({},
               {$set:{"switches.deviceAccess": false}},
               {multi: true},
               (err, data)=>{
                     //todo
                     next();
               })
    
    };
    
    exports.down = function(db, next){
        next();
    };
    

    运行:

    node ./node_modules/mongodb-migrate -runmm -dbc '{ "host":"<db_hostIp_address>","db":"<db_name>","port":<db_port>}' up
    

    注意:

    别忘了用

    更新你的架构

    deviceAccess: {type: Boolean, default: false}

    【讨论】:

      【解决方案2】:

      我想到了三件事。我会推荐第一个。

      • 您根本不需要添加它。如果密钥deviceAccess 不存在,则考虑它false。您可以利用 noSQL 的无模式行为。
      • 运行更新命令以添加新密钥。只有在集合很小的情况下才应该这样做。
      • 执行第二个选项,但只是部分执行。比如,更新前 100 个,然后等待 4-10 秒,然后更新下一个 100 (101-200)。

      希望对你有帮助。

      【讨论】:

      • 无法编写更新代码,您能帮帮我吗?在javascript中,(nodejs)
      • 示例:MyModel.updateMany({}, { $set: { "switches.deviceAccess": 'foo' } });。如果它没有找到deviceAccess 属性,那么它将添加它。确保相应地更新您的 Mongoose 架构。此处的文档:mongoosejs.com/docs/documents.html#updating
      猜你喜欢
      • 1970-01-01
      • 2014-05-29
      • 1970-01-01
      • 2021-04-27
      • 1970-01-01
      • 1970-01-01
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多