mongoose: CastError: Cast to ObjectId failed for value "5875976f8a03b2229c544c50" at path "_id"
我的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的文档就行,或者百度一下
@semicoyoung 昨天查到了