我在定义模型时犯了错误,还是服务器代码的编写方式有错误?
我收到的错误是: 错误:CastError:转换为 [ObjectId] 失败,值“[ { 联系人:新的 ObjectId(ID_OF_CONTACT_STRING),标题:'测试' } ]”(类型字符串)位于路径“relations.0”,因为“CastError”
具有关系字段的猫鼬模型如下所示:
const ContactSchema = new Schema(
{
...
relations: [{
contact: {
type: Schema.Types.ObjectId,
ref: 'Contact'
},
title: String
}],
...
},
{
timestamps: true
}
)
然后我有以下服务器代码:
export default async function handler(req, res) {
await connectDB();
if (!(req.body.relationId && req.body.contactId && req.body.relationTitle)) {
return res.status(400).json({ error: true, message: "Bad params", code: 1 });
}
if (!req.cookies.agent) {
return res.status(401).json({ error: true, message: "Not logged in", code: 202 });
}
try {
const contact = await Contact.findById(req.body.contactId);
const relation = await Contact.findById(req.body.relationId);
if (!contact || !relation) {
return res.status(404).json({ error: true, message: "Invalid contact or relation", code: CONTACT_NOT_FOUND_CODE });
}
console.log(contact._id, "contact id")
console.log(relation._id, "object id")
const newRelation = { contact: relation._id, title: req.body.relationTitle };
console.log(newRelation, "new relation")
//ERROR HAPPENS HERE
await Contact.updateOne({_id: req.body.contactId}, {$push: {relations: newRelation}})
return res.status(200).json({ error: false });
} catch (error) {
console.error("Error:", error);
return res.status(500).json({ error: true, message: "Internal server error" });
}
}
在服务器代码中,所有的body参数都是字符串。
问题是我更新了以前的schama:
const ContactSchema = new Schema(
{
...
relations: [{
contact: {
type: Schema.Types.ObjectId,
ref: 'Contact'
},
title: String
}],
...
},
{
timestamps: true
}
)
我正在使用一个已经制作好的实例。我试图推送一个对象,但该实例需要一个 objectId。