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
。哇,谢谢你帮了我很多忙。那些模型真是一团糟。