如何在填充方法中检查空对象ID?

时间:2018-06-20 00:52:54

标签: node.js mongodb mongoose

我正在尝试使用以下代码填充对象数组:

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

1 个答案:

答案 0 :(得分:1)

更多的问题是您正在为引用字段使用String类型–因为该猫鼬试图将字符串值转换为通常用于引用的ObjectId。应该是

mean: {
  type: Schema.Types.ObjectId,
  ref: 'Inventory'
}

猫鼬的documentation本身指出

  

注意:ObjectId,Number,String和Buffer有效用作引用。但是,除非您是高级用户并且有充分的理由,否则应使用ObjectId。