mongoose: CastError: Cast to ObjectId failed for value "5875976f8a03b2229c544c50" at path "_id"
发布于 8 年前 作者 semicoyoung 5027 次浏览 来自 问答

我的schema是这样的:

   type: String,
   value: String,
   attributes: [mongoose.Schema.Types.Mixed],
   created_at: {type: Date, default: new Date()},
   updated_at: {type: Date, default: new Date()},
 }); ```
我在库中新建数据,
```{
"_id" : ObjectId("5874b8193501af79a31dbb2b"),
"type" : "user_id",
"value" : "1",
"updated_at" : ISODate("2017-01-10T10:31:30.314Z"),
"created_at" : ISODate("2017-01-10T10:31:30.314Z"),
"attributes" : [
	{
		"source" : "campus",
		"nickname" : "x13015528669",
		"created_at" : ISODate("2017-01-10T10:31:53.971Z")
	}
],
"__v" : 0
},```
然后在代码中:
```let query = {type: 'user_id, value:'1'} ```
拿到上面的那条数据,然后在拿那个_id去查:
```query = {_id: '5874b8193501af79a31dbb2b'}```,
这个时候就会抛出错误:
```CastError: Cast to ObjectId failed for value "5875976f8a03b2229c544c50" at path "_id" for model "vertex"```
这个值:‘5875976f8a03b2229c544c50’已经是ObjectId格式的数据,但是为什么还是会抛出转换错误呢?
stackoverflow上面没有找到合适的答案,有兴趣的朋友麻烦帮忙解决下,谢谢。
8 回复

shema里的objectid和初始化的不一样的 你可以去掉那个ObjectId() 自动会转换类型

来自酷炫的 CNodeMD

@lizhongyuan 那个ObjectId,是mongo默认生成的,我并没有手动生成,我传进去的数据只有(type, value, attributes),

我把node_mosules删除,然后 npm install 重新安装模块,然后就可以了。

mongoose 一次更新导致的bug,问题版本目测4.7.4-4.7.6,4.7.2没有问题,回退版本可以解决

问题好像是依赖的bson的问题,导致无法从string创建ObjectId,尝试直接从String创建ObjectId,你可以看到详细的报错栈

_v是什么,我的库也有个这个属性

@ajaxQWER 你看一下mongoDB的文档就行,或者百度一下

回到顶部