node.js - 使用 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
没有范围并且最小值和最大值相等时,没有问题。但是,问题出现的时间pmin
和pmax
值不同。状态显示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
解决方案
推荐阅读
- bar-chart - 为什么 y bar 的值大于堆积条形图中 y 的实际范围?
- javascript - JavaScript 是 x 可被 y 整除 (x % y === 0)
- javascript - 如何获取 Photoswipe 标题文本?
- reactjs - useEffect 是否不适用于 useTansition(并发 API)
- javascript - 未捕获的 ReferenceError:未定义 main
- git - 如何在 git commit 窗口中输入“#”?
- php - 如果 RDS Mysql 密码存储在 AWS 机密管理器中,如何配置它?
- powershell - 如何在 plink.exe 中抑制“键盘交互”提示
- node.js - Is it fundamentally possible pass a binary buffer to VRAM with WebGL?
- php - Laravel sanctum 寻找 api_token 列