CNode

mongoose嵌套问题求助!!

Hhsh075623201发布于12 年前最后回复12 年前7 回复8783 浏览0 收藏

存在两个model文件,分别是 users.js 和role.js 现在在users model中引入role model ,出现Schema hasn't been registered for model "Role" users model 如下形式: var mongoose = require('../api/connect.js'); var RoleSchema = require('./Role.js').RoleSchema; var Role = mongoose.model('roles', RoleSchema);

exports.UserSchema = new mongoose.Schema({ username: String, password: String, .... roleArr:[{ type: mongoose.Schema.Types.ObjectId, ref: 'Role' }] });

查看回复

回复 (7)

3
359056163#1·12 年前

你的RoleSchema (Role.js)文件呢? require('./Role'); require('./User'); exports.Topic=mongoose.model('role'); exports.User=mongoose.model('user'); 在Model文件夹中的index.js使用以上代码

3
359056163#2·12 年前

还有不需要你引入Role模块,ref 的属性值是字符串类型,如果你有建立 role模型 mongoRose 会在你使用populate 方法 通过ref 属性 查找Role模块。

H
hsh075623201#3·12 年前
引用 359056163你的RoleSchema (Role.js)文件呢? require('./Role'); require('./User'); exports.Topic=mongoose.model('r...

这是Role.js var mongoose = require('mongoose'); exports.RoleSchema = new mongoose.Schema({ roleName: String, .... }); 没有index.js

H
hsh075623201#4·12 年前
引用 359056163还有不需要你引入Role模块,ref 的属性值是字符串类型,如果你有建立 role模型 mongoRose 会在你使用populate 方法 通过ref 属性 查找Role模块。

我在user的model 中注释了 如下引用代码: var RoleSchema = require('./Role.js').RoleSchema; var Role = mongoose.model('roles', RoleSchema);

但是 还是 出现如下出错!! Schema hasn't been registered for model "Role".

H
hsh075623201#5·12 年前
引用 359056163还有不需要你引入Role模块,ref 的属性值是字符串类型,如果你有建立 role模型 mongoRose 会在你使用populate 方法 通过ref 属性 查找Role模块。

查询使用如下方法: Users.findOne({username:req.body.username}).populate('roleArr').exec(function(err,doc){ ... });

H
hsh075623201#6·12 年前

找到问题原因了: 由于将Role model注册到roles 代码如下:var Role = mongoose.model('roles', RoleSchema); 因此ref 的时候 应该写ref:'roles' 。

3
359056163#7·12 年前

http://mongoosejs.com/docs/index.html 把 mongoosejs 的迅速上手文档仔细看看。 你不需要 new 一个新的Schema. 直接 var RoleSchema = mongoose.Schema({ \你的代码 });

参与回复
登录后即可参与回复。登录