由于 Typescript 的强类型,我将 Mongodb 的 _id 作为 Angular 中的字符串传递。示例:
public setSelectedProduct = async (productId: string) => {...}
当我将productId传递到后端并尝试在Node.js中使用Mongoose访问Mongodb时,它告诉我productId不是有效的Mongodb id。
exports.getProduct = async (req, res) => {
console.log('req.params.productId', req.params.productId)
const productId = req.params.productId;
// const productId = new mongoose.Types.ObjectId(Number(req.params.productId));
try {
const product = await Product.findOne({_id: productId})
console.log('product', product);
// res.status(200).json(product);
} catch(error) {
console.error(error);
res.status(500).send("Problem getting selected product.");
}
}
CastError:对于模型“Product”的路径“_id”处的值“67420003204128e379f42946”(类型字符串),转换为 ObjectId 失败
我尝试使用以下方法从字符串转换为 ObjectId:
const productId = new mongoose.Types.ObjectId(Number(req.params.productId));
但现有关联产品不予退回。
我该如何处理?
在具体执行查询之前,Mongoose 有一个方法来检查传递的 ObjectId 是否有效。另一点经常有用的是使用 Mongoose 自己的方法执行转换:mongoose.Types.ObjectId("")。