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

Node.js 使用Mongoose、Node Js和Express更新MongoDB中文档的多个字段,node.js,json,ajax,mongodb,express,Node.js,Json,Ajax,Mongodb,Express,我知道这个问题以前被问过很多次,也被回答过很多次,但是我所面临的问题在经过多次尝试后都没有得到解决 我有一个名为properties的集合,它有一个名为rentRange的字段,其结构如下所示 rentRange: { min: {type: Number}, max: {type: Number} } $.ajax({ type:'PUT', url: '/updatePrice',

我知道这个问题以前被问过很多次,也被回答过很多次,但是我所面临的问题在经过多次尝试后都没有得到解决

我有一个名为
properties
的集合,它有一个名为rentRange的字段,其结构如下所示

rentRange: {
        min: {type: Number},
        max: {type: Number}
    } 
$.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){

            }
        });
现在用户有两个选择。他可以将租金设定为单一金额,也可以将其作为一个范围

例如,如果租金为5000套,则

rentRange: {
            min: 5000,
            max: 5000
        } 
如果它被设置为一个范围,那么

 rentRange: {
                min: 5000,
                max: 6000
            } 
可以使用AJAX调用更改和更新号码,如下所示

rentRange: {
        min: {type: Number},
        max: {type: Number}
    } 
$.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
发送到没有范围且最小值和最大值相等时,没有问题。但是,当
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


当然,当它不工作时,您似乎提供了错误的_id值。我想我们需要一个更进一步的帮助。是的,你说得对。我刚刚用console.log(id)检查了一下,对于范围值,它是“未定义的”。但是,为什么会这样呢@Johnnykyou需要在您的客户机中调试它;看看它发送了什么,为什么。解决了问题。为范围值获取的ID错误。非常感谢您指出这一点:)当然,当它不工作时,您似乎提供了错误的_id值。我想我们需要一个更进一步的帮助。是的,你说得对。我刚刚用console.log(id)检查了一下,对于范围值,它是“未定义的”。但是,为什么会这样呢@Johnnykyou需要在您的客户机中调试它;看看它发送了什么,为什么。解决了问题。为范围值获取的ID错误。非常感谢您指出这一点:)