使用Mongoose从关联模型填充文档返回空数组问题咨询
_products返回空数组的排查方案 我来帮你定位这个填充失败的问题,从你的模型代码来看,大概率是以下几个常见原因导致的,你可以逐一排查:
检查引用模型的名称是否完全匹配
你的_products字段指定了ref: 'electronics_model',要确保这个模型已经被正确注册到Mongoose中,并且名称完全一致(Mongoose对模型名称大小写敏感)。比如如果实际注册的模型名是ElectronicsModel或者拼写有误,填充就会找不到对应的集合。确认嵌套字段的填充路径是否正确
注意到_products是嵌套在字段1下面的,所以填充时必须指定完整的嵌套路径,而不是只写_products。正确的调用方式应该是:catModel.findOne({ /* 你的查询条件 */ }) .populate('1._products') // 这里要写完整路径 .exec((err, result) => { // 处理结果 });如果路径写错,Mongoose找不到要填充的字段,自然返回空数组。
验证存储的ObjectId是否有效且存在
先查询你的categories_model集合,看看目标文档中1._products字段存储的ObjectId是什么。然后直接在MongoDB shell中执行:db.electronics_model.find({ _id: ObjectId("你查到的ID值") })如果没有返回任何文档,说明这个ID对应的
electronics_model文档不存在,填充自然为空;如果存储的是字符串而不是ObjectId类型,也会导致匹配失败。检查数据类型是否匹配
你的_products定义为type: Schema.ObjectId,所以存储到数据库中的值必须是ObjectId类型,而不是字符串形式的ID。如果代码中存的是字符串(比如直接把ID转成字符串存储),Mongoose无法将其与electronics_model的_id(ObjectId类型)匹配,填充结果就会是空数组。
你可以按照这个顺序排查,先确认填充路径和模型名称,再验证ID的有效性和类型,应该能快速找到问题所在。
内容的提问来源于stack exchange,提问作者Salmaan shaik

