Mongoose 猫鼬深层种群(特定领域)
我有三种型号。我需要得到一个用户的管理员组名 用户Mongoose 猫鼬深层种群(特定领域),mongoose,Mongoose,我有三种型号。我需要得到一个用户的管理员组名 用户 var userSchema = new mongoose.Schema({ // ... roles: { admin: { type: mongoose.Schema.Types.ObjectId, ref: 'Admin' }, // path 1 }, }); 管理 var adminSchema= new mongoose.Schema({ // ... groups:
var userSchema = new mongoose.Schema({
// ...
roles: {
admin: { type: mongoose.Schema.Types.ObjectId, ref: 'Admin' }, // path 1
},
});
管理
var adminSchema= new mongoose.Schema({
// ...
groups: [{ type: String, ref: 'AdminGroup' }], // path 2
});
AdminGroup
var adminGroupSchema = new mongoose.Schema({
// ...
name: { type: String, default: '' }, // need to get this field
});
猫鼬
User.findById(req.user._id)
.populate({path: 'roles.admin', populate:{ path: 'groups'}})
.exec(function (err, adminGroups) {...}
当我尝试调用我的模板{{adminGroups.name}
时,它返回Admin
模型的name
,该模型也有一个name
字段,而不是AdminGroup
模型。我使用猫鼬4.9.0,所以它必须支持深层人口。
谢谢。您正在使用
findById
并填充其字段
您不会返回管理员组
,而是返回一个用户
,该用户可能具有角色。管理员
可能包含一个组数组
。我之所以使用may这个词,是因为如果这些字段不存在,它们可能不会被填充。但是,如果有一个User
文档,您仍然会得到一个
User.findById(req.user._id).populate({
path: 'roles.admin',
populate: {
path: 'groups'
}
}).exec(function (err, user) {
console.log(err, user); // see what it prints out
console.log(user.roles.admin.groups[0].name);
});
在您的模式定义中,它不应该是
AdminGroup
而不是AccountGroup
?第一个它用groups:[Object]打印出整个用户文档,
第二个现在是returnig Root(我需要的)。那么问题在于模板?我怎么称呼它呢?@ASem将user
对象传递给您的视图,并执行{{user.roles.admin.groups[0].name}
可能?它返回一个错误'Expecting'ID',get'INVALID',我正在使用手柄。@ASem根据这个,它应该是user.roles.admin.groups.0.name
或user.roles.admin.groups.[0].name
。哇,谢谢你帮了我很多忙。那些模型真是一团糟。