我想通过获取数组的ID并修改对象来更新数组内的对象。但是,我似乎无法进入该对象。
如果我通过电子邮件搜索用户,然后使用$set
更新我的对象,则所有其他对象都会消失。
没有错误弹出,只是不起作用。
如果我尝试使用简单的findOne
获取对象,即使我从mongo db复制并粘贴了ID,它也会返回null
。
我一直在尝试5:30h解决此问题,但没有取得任何突破。请帮助我。
//my schemas
const mongoose = require('mongoose');
const ProdcutSchema = new mongoose.Schema({
name:{
type: String,
required: true
},
productDescription:{
type: String,
required: true
},
pricePerUnit:{
type: Number,
required: true
},
productAmmount:{
type:Number,
required: true
},
/*productImagePath:{
type:String,
required: true
}*/
});
const UserSchema = new mongoose.Schema({
name:{
type: String,
},
email:{
type: String,
},
password:{
type: String,
},
date:{
type: Date,
default: Date.now
},
products:[ProdcutSchema]
});
const User = mongoose.model('User', UserSchema);
module.exports = User;
//My ajax (ajax is working fine, I get all the correct data onto the backend)
$.ajax({
type: 'PUT',
url: '/dashboard/' + productID,
contentType: "application/json",
dataType:'json',
data: JSON.stringify({
product_name : productName,
price_PerUnit : productPricePerUnit,
product_Description : productDscp,
product_Ammount : productAmmount,
}),
success: getproducts()
});
//Backend
//Update products
router.put('/dashboard/:id', (req, res)=>{
const ID = req.params.id ;
const {product_name, price_PerUnit, product_Description, product_Ammount} = req.body; //Get access to ajax data using body parser
if(!product_name || !price_PerUnit || !product_Description || !product_Ammount){
res.send('Please fill out all fields with valid content');
}else{
User.findByIdAndUpdate(
{_id : mongoose.Types.ObjectId(ID)}, //Find collection with same email as user
{ $set: { //Pull out index that matches id
name:product_name,
productDescription: product_Description,
pricePerUnit: price_PerUnit,
productAmmount: product_Ammount
} } ,
(err) => {
if (err) console.log(err);
})
}
});
注意:我尝试使用findOne
findOneAndUpdate
,findById
和其他所有方法。
答案 0 :(得分:0)
在代码中,您使用findByIdAndUpdate
并传递包含ID而不是I本身的对象
尝试一下
User.findByIdAndUpdate(mongoose.Types.ObjectId(ID), //Find collection with same email as user
{ $set: { //Pull out index that matches id
name:product_name,
productDescription: product_Description,
pricePerUnit: price_PerUnit,
productAmmount: product_Ammount
} } ,
(err) => {
if (err) console.log(err);
})