Я понимаю, что этот вопрос задавался и отвечался много раз прежде, однако проблема, с которой я сталкиваюсь, не решается после различных попыток.
У меня есть коллекция с именем 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
проблем не возникает, если диапазон отсутствует, а значения min и max равны.Однако проблема возникает, когда 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