【问题标题】:CastError: Cast to ObjectId failed for value XXX at path "_id"CastError:路径“_id”处的值 XXX 转换为 ObjectId 失败
【发布时间】:2016-11-11 04:18:19
【问题描述】:

我正在尝试处理 MEAN Stack 应用程序中的计划。当我调用 findOne 时,我收到此错误:

CastError: Cast to ObjectId failed for value \"[ '576df16eed10c2fccbcbd60c' ]\" at path \"_id\""

这就是我的做法:

Plan.findOne({_id: planId}, function(err, plan){ //do something });

我注意到,当我将 id 作为字符串(如下所示)时,一切正常。

Plan.findOne({_id: '576df16eed10c2fccbcbd60c'}, function(err, plan)

所以,我安慰planId

console.log('planId: ' + planId + ' | ' + typeof planId);
Output: planId: [ '576df16eed10c2fccbcbd60c' ] | object

我一直在尝试在 SO 中找到的东西,但任何东西都可以帮助我解决这个问题:/

【问题讨论】:

  • 你能告诉我planId是如何发送和接收的吗?

标签: node.js mongodb mongoose mean-stack


【解决方案1】:

看起来planId 是一个数组。

你可以试试planId[0] 吗?

Plan.findOne({_id: planId[0]}, function(err, plan){ //do something });

Plan.findOne({_id: new ObjectId(planId[0])}, function(err, plan){ //do something });

【讨论】:

  • ObjectId 未定义。所以我尝试了planId = new mongoose.Types.ObjectId(planId[0]);,但它给了我另一个错误:“找不到计划”。我确定这个 id 是正确的。
  • 转换为 ObjectId 后,planId 的输出为:577fc3002eccc12d154631e1,类型仍为 object
  • 未找到计划很奇怪;您确定要包括(需要)Plan 模型吗?
  • 是的! Plan = mongoose.model('Plan');。我注意到,当我尝试像上面的 cmets 一样转换为 ObjectId 时,该函数给了我另一个 ID。这就是我找不到计划的原因。有一种方法可以转换为保持初始 ID 的 ObjectId?实际上我可以通过一种解决方法来处理这个问题,只需使用替换删除[""]。但我不想让它进入代码。
猜你喜欢
  • 2020-05-20
  • 2014-06-20
  • 2021-02-21
  • 2017-03-26
  • 2017-05-26
  • 2019-01-06
  • 2016-05-06
  • 2018-03-17
  • 2015-07-16
相关资源
最近更新 更多