我知道这个问题曾经被问过很多次,但是经过各种尝试,我面临的问题并没有得到解决。
我有一个名为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
没有范围并且最小值和最大值相等时,没有问题。但是,当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