【问题标题】:How to update a field-List in MongoDB using Mongoose and Nodehs?如何使用 Mongoose 和 Nodejs 更新 MongoDB 中的字段列表?
【发布时间】:2021-09-13 18:22:36
【问题描述】:

亲爱的 Stackoverflow 团队您好。

我正在尝试修补可以处理多个“设备”的用户。我正在使用带有 Express 和 Mongoose (MongoDB) 的 nodeJs。我的用户模型如下:

const userSchema = new Schema({
     name: {type: String, required: true},
     lastname: {type: String, required: true},
     email: {type: String, required: true, trim: true, lowercase: true, unique: 
            true},
     password: {type: String, required: true, minlength: 5},
     userTyp: {type: String, required: true, 
     enum: {values: ['Administrator', 'Doctor','Patient','Optiker'], message: 
           '{VALUE} is not supported' }},
     image: {type: String},
     devices: [ {device: {type: Schema.Types.ObjectId, ref: "Device"}} ]
    });

而且我每次做补丁时都希望有这样的东西:

{
"user": {
    "_id": "6138cd30ffc5239bba72e6c0",
    "name": "Fernando",
    "lastname": "Gonzalez",
    "email": "f.gonzalez@unitransferklinik.de",
    "password": "Hol087+/*",
    "userTyp": "Administrator",
    "image": "sdsadsadsa/asdfasdas",
    "devices": [
        {
            "device": "6138c7587ab4b5fc4d369230"
        },
        {
            "device": "6138c7587ab4b5fc4d365210"
        }
    ],
    }
}

如何在我的函数中实现:

const updateUser = async (req, res, next) => {
const { name, lastname, email, password, userTyp, device } = req.body;
    const userID = req.params.userID;
    let updatedUser;
    try {
        updatedUser = await User.findById(userID);
    }catch(err){
        console.log(err);
        return next(new HttpError('Something happend.', 500));
    }

    updatedUser.name = name;
    updatedUser.devices = [device, ...updatedUser.devices];
    try{
             updatedUser.save();
        }catch (err) {
            return next(new HttpError('It could not uodate device.', 500));
        }
    });

    res.status(200).json({user: updatedUser.toObject( {getters: true} )});
};

简单来说,我想在每次为新设备打补丁时更新列表,然后我可以获取每个用户的所有设备列表。

非常感谢! 问候, 艾略特

【问题讨论】:

    标签: node.js arrays mongodb express mongoose-schema


    【解决方案1】:

    可以使用mongoose库的findOneAndUpdate函数

    const dynamicModel = libMongoose.model(collection_name, userSchema);
    var filter = { userID: req.params.userID };
    var update = { name: name, devices : [...device, ...updatedUser.devices]};
    //callback approach
    dynamicModel.findOneAndUpdate(filter, update, (err, resp) => {
        if(err) {
            console.log("Error while updating record " + JSON.stringify(err));
        }
        if(!resp) {
            console.log("Couldn't find record");
        } else {
            console.log("Updated data to DB");
        }
    });
    

    您也可以参考here 进行异步等待,希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 2017-10-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 2017-10-25
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 1970-01-01
      相关资源
      最近更新 更多