我正在尝试使用以下代码填充对象数组:
inventory.populate(result, {
path: 'activities.mean',
$match: { 'activities.mean': {$ne: ''} }
}, callback);
mean
的类型是:
mean:{type:String, ref: 'Inventory'}
在填充结果时,我的回调函数出现了错误:
CastError:在模型“库存”的路径“ _id”处,值“”的强制转换为ObjectId失败......
这清楚地表明我的结果包含空的activities.mean
。
我尝试了提供的其他解决方案,包括我在上面的代码中编写的match
,但我无法真正使其工作。不知道为什么match
在这里不起作用。
我希望该代码执行的操作是:
如果activities.mean
为空字符串,则不要尝试填充该mean
。
答案 0 :(得分:1)
更多的问题是您正在为引用字段使用String
类型–因为该猫鼬试图将字符串值转换为通常用于引用的ObjectId。应该是
mean: {
type: Schema.Types.ObjectId,
ref: 'Inventory'
}
猫鼬的documentation本身指出
注意:ObjectId,Number,String和Buffer有效用作引用。但是,除非您是高级用户并且有充分的理由,否则应使用ObjectId。