Как обновить документ БД новыми объектами внутри? - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь обновить свой документ БД, добавив firstName и lastName, но когда я использую свою функцию, она фактически перезаписывает все.Так, например, мой объект теперь выглядит так

{
    "_id" : ObjectId("5b0df225287cc77612ed89a5"),
    "email" : "user@user.com",
    "password" : "$2HbyP4.ts9O/zrjV5Pcd/Z28bhOb8oGas9wEG",
    "userData" : [ 
        {
            "role" : "user",
            "phone" : 747483245,
            "_id" : ObjectId("5b0df225287cc77612ed89a6"),
            "address" : [ 
                {
                    "_id" : ObjectId("5b0df225287cc77612ed89a7")
                }
            ]
        }
    ],
    "__v" : 0
}

, но когда я обновляю его, он выглядит так

{
    "_id" : ObjectId("5b0df225287cc77612ed89a5"),
    "email" : "user@user.com",
    "password" : "$2HbyP4.ts9O/zrjV5Pcd/Z28bhOb8oGas9wEG",
    "userData" : [ 
        {
            "firstName" : "First Name",
            "lastName" : "Last Name",
            "_id" : ObjectId("5b0df225287cc77612ed89a6"),
            "address" : [ 
                {
                    "_id" : ObjectId("5b0df225287cc77612ed89a7")
                }
            ]
        }
    ],
    "__v" : 0
}

, поэтому у меня больше нет role и phone внутримоя функция

// Update user data
exports.update = function (req, res, next) {
  User.findByIdAndUpdate(req.user._id, req.body)
    .exec()
    .then(doc => res.json(doc))
    .catch(err => res.json(err))
}

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Попробуйте это

exports.update = (req, res) => {

  const query = {_id: req.user._id},
    update = { $set: {
       "userData.$.firstName": req.body.firstName, 
       "userData.$.lastName": req.body.lastName }
    },
    options = { upsert:true };

  User.findByIdAndUpdate(query, update, options)
    .exec()
    .then(user => res.json(user))
    .catch(err => res.json(err));
}
0 голосов
/ 30 мая 2018

попробуйте так:

exports.update = function (req, res) {
  User.findByIdAndUpdate(req.user._id, { $set: { firstName: req.body.firstName , lastName:req.body.lastName }}, {upsert:true},function(err,user){
        if(err){
            res.json(err);
        }else{
            res.json(user);
       }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...