mongoose模块中使用populate方法关联数据,报错Schema hasn't been registered for model "..."的解决方法


别拦我!别拦我!别拦我!

我要给大家分享个bug!!!

情况是这样的,一个Node.js+MongoDB的项目中,使用了mongoose操作数据库,在使用populate()方法进行类似表关联操作的时候,报错如下:

Schema hasn't been registered for model "..."

数据库连接和业务逻辑排了了一整遍,没有问题,但只要使用populate()方法就报错。

老孙翻遍了Google上搜出来的所有相关问题的技术文档,没找到合适的方法。

由于项目已经能写了不少功能,遂单独写了个demo,测试没问题。

中间过程就不详述了,反正反复测试了N多次,最终找到了问题。

 

表关联的时候我们在Schema数据骨架中需要用ref属性定义关联集合,问题就出在这里!!!!!

这个属性的值不能有大写!必!须!小!写!!!

 

评论
  • 这个要看mongoose.model定义出来的模型,大小写不限制,估计定义的时候是这样的mongoose.model('users', userSchema),而populate的时候用的是大写的Users

  • 本人小白 定义模型和ref属性关联通一使用小写也还是报这个错 很受挫.. :cry:

  • 希望有人看到, const Goods = require('../../model/admin/Goods'); 先引入这个集合,这样肯定不会报错的 queryOptions.populate = { path: 'goods', model: Goods }

    • 超级码力

      卧槽,救命天使,找了快两小时了,确实跟大小写没什么关系,不过应该是populate({path: 'goods', model: Goods }),后来的小伙伴可以注意一下

  • 问题出在你创建用户集合模板的时候,用户集合名称跟你ref:写的集合不一致,要不两边都小写,又不两边都大写,不能一边小写,一边大写。

发表评论 说点什么