使用Mongoose,Node Js和Express更新MongoDB中文档的多个字段

时间:2019-02-08 18:15:57

标签: node.js json ajax mongodb express

我知道这个问题曾经被问过很多次,但是经过各种尝试,我面临的问题并没有得到解决。

我有一个名为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没有范围并且最小值和最大值相等时,没有问题。但是,当pminpmax具有不同的值时,就会出现此问题。状态显示为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

0 个答案:

没有答案