我尝试使用mongoose的updateOne函数编辑整个表单,但每当我单击编辑按钮时,它都显示错误CastError:对于模型“Stocks”,路径“_id”处的值“1”(类型字符串),转换为ObjectId失败。
计数器.js
const counterSchema = {
id: {
type: String
},
seq: {
type: Number
}
}
股票.js
const stockSchema = new Schema({
id: {
type: Number
},
flowerName: {
type: String,
required: true
}
},{timestamps: true }
);
这是从我的post方法,我添加一个值的形式
Counter.findOneAndUpdate(
{id: "autoval"},
{"$inc":{"seq": 1}},
{new: true}, (err, cd) => {
let seqID;
if(cd==null) {
const newValue = new Counter({id: "autoval", seq:1})
newValue.save()
seqID = 1
} else {
seqID = cd.seq
}
const qty = Number(req.body.quantity)
const price = Number(req.body.pricePieces)
const stock = new Stocks ({
id: seqID,
flowerName: req.body.flowerName
})
stock.save()
.then(result => {
res.redirect('flowers-in-stock');
}).catch(err => console.log(err));
}
)
我想在编辑页面继续
Stocks.findById(req.params.id)
.then (stock => {
res.render('flowers-in-stock-edit', {stocks: stock})
}).catch(err => console.log(err));
}
1条答案
按热度按时间bhmjp9jg1#
findById函数将其参数与MongoDB文档中的
_id
字段进行匹配。您的模式定义了
id
,但没有定义_id
,因此_id
将在插入时自动创建,并且类型为ObjectId。findById
尝试强制转换其参数以匹配_id
字段的数据类型。错误消息指示您传递的是"1"
作为要查找的值,而findById
尝试将该值强制转换为ObjectId。"1"
不是有效的ObjectId,因此操作失败。要基于
id
字段进行搜索,请使用findOne而不是findById
: