Значения устанавливаются как нулевые внутри базы данных, когда соответствующие значения не передаются при обновлении - PullRequest
1 голос
/ 23 мая 2019

Я хочу обновить некоторые ключи и значения в базе данных.У меня уже есть некоторые поля, заполненные как firstname, lastname, и теперь я хочу обновить эти документы с помощью изображения профиля, номера контакта и т. Д.

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

Если пользователь хочет обновить оба firstname иlastname, а также фото профиля, затем я хочу, чтобы они тоже обновлялись.

Я использовал метод обновления mongo и запросил новое значение для обновления.Я передал новые значения через почтальона, но не передаю старые значения, которые уже были в базе данных.При обновлении он показывает ноль для тех, чьи значения.

router.put('/:id/edit',upload.array("images",2),function(req,res,next){
    shopid= req.params.id,
    console.log(req.body);

     User.find({"_id":shopid}).update({
            firstname: req.body.firstname,
            lastname: req.body.lastname,
            contact_no : req.body.contact_no,
            images:{
                shop_logo:req.files[0].path,
                shop_picture: req.files[1].path,
             },
            shopname:req.body.shopname,
            updated_at: Date.now(),
    },function(err,data){
        if(err){
            res.json(err);
        }else{
            res.json(data);
         }
    });

});

Результат:

_id: "5ce29ba3e0c2d825d9e5a39f"
firstname: null
lastname: "Gyaawali"
geo: Array
shopkeeper: true
created_at: 2019-05-20T12:20:51.407+00:00
updated_at: 2019-05-23T15:00:04.442+00:00
__v: 0
contact_no: 9837949483
pan_no:"55343fASDE"
images: Object
shop_logo: "public/shop_logo/images-1558623604437-flag-map-of-nepal-logo-C43E9EAFA..."
shop_picture: "public/shop_logo/images-1558623604439-flat-sale-background_23-21477500..."
shopname: "Hello.shop"

Я не ожидаю, что поле firstname будет изменено.Но оно меняется на ноль.

Ответы [ 2 ]

2 голосов
/ 24 мая 2019

Потому что, выполняя этот запрос, вы обновляете и эти поля. Даже если вы не отправляете им какое-либо значение, вы обновляете эти поля с помощью null (например, req.body.firstname равно нулю, поскольку имя не входит в текст сообщения) , Если вы не хотите обновлять их, вам не следует включать эти поля в запрос. Если вы не хотите обновлять имя и фамилия , но в других полях да, запрос должен выглядеть примерно так:

User.find({"_id":shopid}).update({
        contact_no : req.body.contact_no,
        images:{
            shop_logo:req.files[0].path,
            shop_picture: req.files[1].path,
         },
        shopname:req.body.shopname,
        updated_at: Date.now(),
},function(err,data){
    if(err){
        res.json(err);
    }else{
        res.json(data);
     }
});

Надеюсь, что это ответ на ваш вопрос!

1 голос
/ 24 мая 2019

Просто предварительно проверьте ключи, если они существуют в req.body, а затем только обновите их.Как это показано ниже:

router.put("/:id/edit", upload.array("images", 2), function (req, res, next) {
    let shopid = req.params.id;
    let {
        firstname,
        lastname,
        contact_no,
        shopname
    } = req.body;
    let updateObj = {};
    firstname && (updateObj.firstname = firstname);
    lastname && (updateObj.lastname = lastname);
    contact_no && (updateObj.contact_no = contact_no);
    shopname && (updateObj.shopname = shopname);
    updateObj.updated_at = Date.now();
    updateObj.images = {
        shop_logo: req.files[0].path,
        shop_picture: req.files[1].path
    };
    User.find({
        _id: shopid
    }).update(
        updateObj,
        function (err, data) {
            if (err) {
                res.json(err);
            } else {
                res.json(data);
            }
        }
    );
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...