Как я могу редактировать вложенные объекты в мангусте - PullRequest
1 голос
/ 12 июня 2019

Текущий Я могу редактировать объекты, которые не являются вложенными.Я хочу редактировать свойства родительского и вложенного объекта.Как я могу сделать это, используя мангуста.

Редактировать маршрут: -

router.put('/editUser/:userId', checkAuth, function (req, res, next) {
    if(req.userData.role2 === 'superadmin') {
    const id  = req.params.userId;
    const newUserData  = req.body;
    Admin.findOneAndUpdate({ _id: id }, {$set: newUserData}, { new: true }, (err, doc) => {
                if (err) return res.send(err.message);
                if (doc) return res.send(doc);

            })
    } else {
        res.status(401).send(["Not authorized. Only super admin can update details."]);
    }       
});

Контроллер: -

module.exports.register = (req, res, next) =>{  

    var admin = new Admin();
    admin.companyName = req.body.companyName;
    admin.address = req.body.address;
    admin.admins = {
                    firstName : req.body.firstName, 
                    lastName : req.body.lastName,
                    phoneNumber : req.body.phoneNumber,
    };

У меня есть ответ json примерно так: -

{
  "admins": {
            "firstName": "ABC",
            "lastName": "FF",
            "phoneNumber": "855599"
   },
  "_id": "5d008f5a287805414247bd33",
  "companyName": "ABC",
  "address" : "UAE"
  "__v": 0
}

Я могу редактировать companyName и address.Как я могу редактировать свойства вложенных объектов также ??Какие изменения нужно внести в маршрут редактирования?

РЕДАКТИРОВАТЬ Добавлена ​​схема

var adminSchema = new mongoose.Schema({
    companyName : {
                type: String,
                required: "Company  name can't be empty.",
                required: false
                },  
    companyID:  {
                type: String,
                },
    address :   {
                type: String,
                required: "Address can't be empty."
                },
    admins:     {
                firstName : {
                            type: String,
                            required: "First name can't be empty."
                            },
                lastName : {
                            type: String,
                            required: "Last name can't be empty."
                            },  
                phoneNumber :{
                            type: String,
                            required: "Reqired for further contact. Can't be empty."
                            }
    }           
});
mongoose.model('Admin', adminSchema);

И в Почтальоне, если я хочу просто отредактировать phoneNumberЯ передаю

URL: - localhost:3000/api/editUser/{id} с телом "{phoneNumber": "0000000"}

1 Ответ

1 голос
/ 12 июня 2019

Вы должны использовать async/await для оптимизации вашего кода:

router.put('/editUser/:userId', checkAuth, async function (req, res, next) {
    if(req.userData.role2 === 'superadmin') {
    const id  = req.params.userId;
    const newUserData  = req.body;
    let newData = await Admin.findOne({ _id: id }).exec();
    newData['admins'].firstName = 'new First Name'
    newData['admins'].lastName = 'new Last Name'
    newData['admins'].phoneNumber = 'new Phone Number'
    await newData.save();
    } else {
        res.status(401).send(["Not authorized. Only super admin can update details."]);
    }       
});

ОБНОВЛЕНИЕ ИСПРАВЛЕНИЯ СХЕМА И МАРШРУТИЗАТОР Ваш Admin Shema должен быть:

let adminSchema = new mongoose.Schema({
    companyName : {
                type: String,
                required: false
                },  
    companyID:  {
                type: String,
                },
    address :   {
                type: String,
                },
    admins:     {
                type : new Schema({
                firstName : {
                            type: String,
                            required: true
                            },
                lastName : {
                            type: String,
                            required: true
                            },  
                phoneNumber :{
                            type: String,
                            required: true
                            }
                    })
                    }     
});
mongoose.model('Admin', adminSchema);

Гудлак.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...