我在NextJS应用程序中使用Mongoose时遇到错误。具体来说,我试图保存一个文档,其中一个字段引用了ObjectId,但我得到了以下错误:
Cast to ObjectId failed for value "....." (type string) at path "author" because of "BSONError"
这里有一点背景:
- 我有一个Mongoose模式,其中包含一个名为
author
的字段,该字段应该是对另一个文档的引用。 - 当我尝试保存新文档时,我将
author
字段的值作为字符串传递。
我知道Mongoose正在尝试将此字符串转换为ObjectId,但在此过程中遇到了错误。
下面是我的模式的简化版本以供参考:
author:{
type:mongoose.Schema.Types.ObjectId,
ref:"User",
required: true,
},
这是保存的代码
export async function createText({ text, author, communityId, path }: Params) {
try{
connectToDB();
const createdText= await Text.create({
text,author,community:null,path
});
// Update User Model
await User.findByIdAndUpdate(author,{
$push:{text:createdText._id}
})
revalidatePath(path);
}
catch (error:any){
throw new Error(`Error creating thread:${error.message}`)
}
}
1条答案
按热度按时间j0pj023g1#
当我尝试保存一个新文档时,我将作者字段的值作为字符串传递
您必须使用
mongoose.Types.ObjectId()
方法将author从String
转换为ObjectId
。**注意:author的
String
值应该是有效的ObjectID
。