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错误。非常感谢您指出这一点:)