多对多的关系 – 填充查询中的相关数据 – Keystonejs

我正在研究一个keystonejs项目,并遇到两个模型之间的关系问题。

我有以下两种模式:

用户型号:

User.add({ name: { type: Types.Name, required: true, index: true }, email: { type: Types.Email, initial: true, required: true, index: true }, number: { type: Types.Number, index: true }, password: { type: Types.Password, initial: true, required: true } }, 'Permissions', { isAdmin: { type: Boolean, label: 'Can access Keystone', index: true }, }, 'Groups', { groups: {type: Types.Relationship, ref: 'Group', many: true } }); 

我有一个组模型

 Group.add({ name: { type: String, required: true, index: true }, description: { type: String, initial: true, required: true, index: true} }); 

我有一个聚合函数,基本上拉所有的用户在其中的组

  User.model.aggregate({$group:{'_id':'$groups'}}).exec(function(err,data){ console.log(data); }); 

我的问题是,上面的聚合只显示我的组_id值,而不是他们的名字。

我怎么能在前端填充和显示名字? 显然这个ID在后端引用是必要的,但对于那些不起作用的前端用户是必须的。

谢谢

你可以很容易地创build你想要的,所以不要气馁。 你只需要在mongoose的“.populate()”函数上。 看下面的例子。

用户模型(稍微整理 – 我删除了(奇怪的?)嵌套)

 User.add({ name: { type: Types.Name, required: true, index: true }, email: { type: Types.Email, initial: true, required: true, index: true}, number: { type: Types.Number, index: true }, password: { type: Types.Password, initial: true, required: true }, isAdmin: { type: Boolean, label: 'Can access Keystone', index: true }, groups: {type: Types.Relationship, ref: 'Group', many: true } }); 

组模型 – 记下为了方便pipe理而添加在底部附近的Group.relationship({})选项(显示在后端引用该组的用户)

 Group.add({ name: { type: String, required: true, index: true }, description: { type: String, initial: true, required: true, index: true} }); Group.relationship({ ref: 'User', path: 'users', refPath:'Groups'}); 

控制器获取用户列表及其所有相应的组信息

  view.on('init', function(next) { keystone.list('User').model.find() .populate('groups') .exec(function(err, users) { if(err) { console.log(err); return next(err); } else { locals.data.users = users; next(err); } }); }); 

控制器获取特定组内的用户显示在前端(首先需要组ID)

  view.on('init', function(next) { keystone.list('User').model.find() .where('Groups').in([array, of, group, ids]) .populate('groups') .exec(function(err, users) { if(err) { console.log(err); return next(err); } else { locals.data.users = users; next(err); } }); }); 

locals.data.users在每种情况下都会像这样返回:

 [ { _id: '', name: '', ... groups: [ { _id: '', name: '' ... } ] } ]