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属性定义关联集合,问题就出在这里!!!!!
这个属性的值不能有大写!必!须!小!写!!!
Allen
这个要看mongoose.model定义出来的模型,大小写不限制,估计定义的时候是这样的mongoose.model('users', userSchema),而populate的时候用的是大写的Users
will
本人小白 定义模型和ref属性关联通一使用小写也还是报这个错 很受挫.. :cry:
admin
程序这东西就是要在磨砺中成长。
123
定义时不能用驼峰,首字母可大写后面只能小写
阿臻
希望有人看到, const Goods = require('../../model/admin/Goods'); 先引入这个集合,这样肯定不会报错的 queryOptions.populate = { path: 'goods', model: Goods }
admin
感谢分享
超级码力
卧槽,救命天使,找了快两小时了,确实跟大小写没什么关系,不过应该是populate({path: 'goods', model: Goods }),后来的小伙伴可以注意一下
123
这个应该是根据你数据库中的表来ref连接的
can
问题出在你创建用户集合模板的时候,用户集合名称跟你ref:写的集合不一致,要不两边都小写,又不两边都大写,不能一边小写,一边大写。