MongooseError: Cast to ObjectID failed for value on reading json for db seed
Posted
技术标签:
【中文标题】MongooseError: Cast to ObjectID failed for value on reading json for db seed【英文标题】: 【发布时间】:2017-12-21 05:04:21 【问题描述】:我有一个带有如下参考字段的模型方案:
const UserSchema = new mongoose.Schema(
// ...
uf:
type: mongoose.Schema.Types.ObjectId, ref: 'UF', index: true
,
);
我的测试数据库种子代码正在使用来自 json 文件的数据,如下所示:
[
"_id": 91283,
"name":"Test user",
"uf": 124411923,
"version": 2
]
在种子过程中,在模型保存方法之后,我收到了这个错误:
ValidationError: User validation failed: uf: Cast to ObjectID failed for value "124411923" at path "uf"
errors:
uf:
MongooseError: Cast to ObjectID failed for value "124411923" at path "uf"
这是负责加载 jsons 并保存到数据库的代码,我已经对种子列表进行了排序,以便首先插入 UF:
function seed()
console.log('Starting db seed...');
return Promise.each(initialData, (data) =>
// path to mongo model js file
let Model = require(data.model);
removeModel(Model)
.then(() =>
console.log('[' + data.name + '] model removed. ');
return saveModel(data, Model);
).then(() =>
console.log('[' + data.name + '] model saved');
).catch( (err) =>
console.error('Error seeding db', err);
);
);
/**
* Saves model to the database
* @param * data
* @param * Model
*/
function saveModel(data, Model)
// path to json data file
let seedList = require(data.seed);
return Promise.map(seedList, function(seed)
let newItem = new Model(seed);
return newItem.save();
);
谁能帮忙?
【问题讨论】:
正如错误所说,124411923
不能转换为 ObjectId。
没用的朋友
抱歉,我只是不确定您遗漏了什么。您已在架构中将 uf
定义为 ObjectId,但您试图将 124411923
放入该字段。没有转换。
我正在尝试理解 mongodb 的引用概念。如何在 json 中引用另一个 mongo 文档?就像外键一样。
你可以阅读那个here。
【参考方案1】:
在您的用户文档中,您没有包含有效的 ObjectId,因此当您尝试存储为 ObjectId 类型时会出错。
Refs 只能保护 _id 字段免受其他集合的影响。
因此,在您的用户文档中,您需要包含对 UF 集合中的 _id 字段的引用:
[
"_id": 91283,
"name":"Test user",
"uf": [_id from UF here],
"version": 2
]
注意:如果您已将 UF 架构中的 _id 字段明确定义为类型 Number,那么您可以通过匹配类型从您的用户架构中引用该字段:
const UserSchema = new mongoose.Schema(
// ...
uf:
type: Number, ref: 'UF', index: true
,
);
【讨论】:
【参考方案2】:您似乎没有有效的 ObjectId 字符串。尝试使用123456789012
,因为它是一个 12 字节的字符串。
【讨论】:
以上是关于MongooseError: Cast to ObjectID failed for value on reading json for db seed的主要内容,如果未能解决你的问题,请参考以下文章
`R.string.cast_casting_to_device`在哪个包中
oracle(cast , to_char , to_date )用法
SQL Server 中的 BIT_XOR ,cast_to_raw 等效项