Обновите несколько полей документа в MongoDB, используя Mongoose, Node Js и Express - PullRequest
0 голосов
/ 08 февраля 2019

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

У меня есть коллекция с именем properties, в которой есть поле под названием rentRangeи имеет структуру, показанную ниже

rentRange: {
        min: {type: Number},
        max: {type: Number}
    } 

Теперь для пользователя есть два варианта.Либо он может установить цену аренды равной единственной сумме, либо он может оставить ее в диапазоне.

Например, если арендная плата составляет 5000 единиц, тогда

rentRange: {
            min: 5000,
            max: 5000
        } 

И если она установленазатем

 rentRange: {
                min: 5000,
                max: 6000
            } 

Можно изменить и обновить номер с помощью вызова AJAX, как показано ниже

$.ajax({
            type:'PUT',
            url: '/updatePrice',
            data: JSON.stringify({
                rentRange:{
                    _id: id,
                    min: from,
                    max: to
                }
            }),
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            _csrf: "{{csrfToken}}",
            success: function(data){

            }
        });

И этот запрос принимается по этому маршруту

index.js

router.put('/updatePrice', isLoggedIn, function(req, res, next){
    let id = req.body.rentRange._id;
    let pmin = Number(req.body.rentRange.min);
    let pmax = Number(req.body.rentRange.max);

    Property.update({_id: req.body.rentRange._id}, {$set : {rentRange:{min: pmin, max: pmax}}})
        .then((data)=> {
            console.log(data);
            return res.json({message: data});
        })
        .catch(err=>{
            return next({message: `Error updating User`});
        });
}); 

При отправке rentRange проблем не возникает, если диапазон отсутствует, а значения min и max равны.Однако проблема возникает, когда pmin и pmax имеют разные значения.Статус показывает 200, однако обновления не происходит, просто остаются предыдущие значения, а в журнале консоли отображается следующее

{ n: 0, nModified: 0, ok: 1 }

. После долгих поисков я наткнулся на различные способы изменения запрашиваемой части и использовалследующие методы: -

Метод 1

 Property.findById(id, function(err, prop){
       if(err){
           console.log(err);
       }else{
           console.log(prop);
           prop.rentRange.min = min;
           prop.rentRange.max = max;

           prop.save(function(err){
               if(err){
                   console.log(err);
               }
               else{
                   res.json(prop);
               }
           });
       }
    });

Метод 2

Property.update({_id: req.body.rentRange._id}, {$set : {"rentRange.min": pmin, "rentRange.max": pmax}})
        .then((data)=> {
            console.log(data);
            return res.json({message: data});
        })
        .catch(err=>{
            return next({message: `Error updating User`});
        });

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

Кажется, я не могу определить ошибку.Я предполагаю, что это что-то очень глупое или маленькое, но мне нужно больше ясности в решении.

PS: Извините за длинный пост: p

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