Mongoose错误:由于“BSONError”,路径“author”处的值“.....”(类型字符串)转换为ObjectId失败

nafvub8i  于 2023-10-19  发布在  Go
关注(0)|答案(1)|浏览(197)

我在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}`)
  }
}
j0pj023g

j0pj023g1#

当我尝试保存一个新文档时,我将作者字段的值作为字符串传递
您必须使用mongoose.Types.ObjectId()方法将authorString转换为ObjectId

**注意:authorString值应该是有效的ObjectID

const createdText= await Text.create({
    text,
    author: (new mongoose.Types.ObjectId(author)),
    community: null,
    path
});

相关问题