首页 > 解决方案 > 使用 Mongoose、Node Js 和 Express 在 MongoDB 中更新文档的多个字段

问题描述

我知道这个问题之前已经被问过很多次了,但是我面临的问题在经过各种尝试后都没有得到解决。

我有一个名为的集合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 }

经过多次冲浪后,我遇到了各种更改查询部分的方法,并使用了以下方法:-

方法一

 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);
               }
           });
       }
    });

方法二

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

标签: node.jsjsonajaxmongodbexpress

解决方案


推荐阅读