Mongoose 拒绝将有效字符串转换为 ObjectId
Posted
技术标签:
【中文标题】Mongoose 拒绝将有效字符串转换为 ObjectId【英文标题】:Mongoose refuses to cast valid string to ObjectId 【发布时间】:2017-05-20 00:08:38 【问题描述】:我返回文档_id
并将其用作req.params.id
以便稍后获取文档。
ObjectId.isValid()
返回true
,然后在ObjectId()
或Find
或FindOne
中使用它会导致转换错误或
十六进制不是函数。
基本上也是直接从数据库复制粘贴_id
进行测试。
我正在使用猫鼬 ^4.7.6; _id
看起来像:586e30a597f85b69891df304
[堆栈跟踪]
[CastError: 转换为 ObjectId 的值失败 模型“模块”的路径“_id”中的“586e30a597f85b69891df304”] 消息:“模型“模块”的路径“_id”处值“586e30a597f85b69891df304”的值“586e30a597f85b69891df304”转换为 ObjectId 失败”, 名称:'CastError', stringValue: '"586e30a597f85b69891df304"', 种类:'ObjectId', 值:'586e30a597f85b69891df304', 路径:'_id', 原因:未定义,
【问题讨论】:
“十六进制不是函数”听起来不像 Mongoose 拒绝施放。这听起来更像是您或其他人代码中的错误。请发布错误的整个堆栈跟踪。 添加了部分跟踪,但格式似乎不正确 Cast to ObjectId failed for value "586cc8b3ea780c071bbe2469" at path "_id" for model "User"的可能重复 【参考方案1】:原来这是那个版本的猫鼬中的一个错误。删除我的 node_modules 并使用设置为 4.3.3 的 mongoose 重新安装解决了这个问题。
【讨论】:
【参考方案2】:这是 Mongoose >=4.7.3 中的一个错误 https://github.com/Automattic/mongoose/issues/4867
bson 包真的有问题
【讨论】:
以上是关于Mongoose 拒绝将有效字符串转换为 ObjectId的主要内容,如果未能解决你的问题,请参考以下文章
在 mongoose 4.6.0 中将字符串转换为 ObjectId 失败
在 mongoose 4.6.0 中将字符串转换为 ObjectId 失败