将项目名称添加到keystone.js中的关系字段中

有没有人有一个很好的例子,在keystonejs中的关系字段添加名称? 现在它只是保存一个ID,所以如果我需要显示在玉模板中的字段名称我也需要查询该关系模型。 理想情况是这样的:

var keystone = require('keystone'), Types = keystone.Field.Types; /** * Titles Model * ============= */ var Title = new keystone.List('Title'); Title.add({ name: { type: String, required: true, initial: true }, room: { type: Types.Relationship, initial: true, required: true, ref: 'Screening', addNew: false }, businessUnit: { type: Types.Relationship, initial: true, required: true, ref: 'BusinessUnit', addNew: false } }); Title.defaultSort = '-createdAt'; Title.defaultColumns = 'name, room'; Title.register(); 

会像这样保存:

 title = { name: 'name', room: 3141234123442, businessUnit: { name: 'business name', _id: 123412341234 } } 

如果没有例子,如果有人可以走我通过做一个自定义关系字段types来存储从关系select菜单中的值和ID我可能弄明白的最佳做法。 这个网站将在每个集合中有1000个文档,所以我现在需要关注性能和最佳实践。

你不能用Keystone把它保存成这样,但是你可以把它当成你想要的玉石模板传递给对象。

你只需要按照mongoose / mongodbfunction“填充”关系字段。

**所以你的businessUnit模型可能看起来像这样:

 var keystone = require('keystone'); var Types = keystone.Field.Types; var BusinessUnit = new keystone.List('BusinessUnit', { autokey: { from: 'name', path: 'key', unique: true }, plural: 'BusinessUnits' }); BusinessUnit.add({ name: { type: String, required: true }, }); BusinessUnit.relationship({ ref: 'Title', path: 'title', refPath: 'businessUnit' }); BusinessUnit.register(); 

您的标题模型如上

 var keystone = require('keystone'), Types = keystone.Field.Types; var Title = new keystone.List('Title'); Title.add({ name: { type: String, required: true, initial: true }, room: { type: Types.Relationship, initial: true, required: true, ref: 'Screening', addNew: false }, businessUnit: { type: Types.Relationship, initial: true, required: true, ref: 'BusinessUnit', addNew: false } }); Title.defaultSort = '-createdAt'; Title.defaultColumns = 'name, room'; Title.register(); 

你的控制器的重要部分可能看起来像这样

 //Get all Titles with their nested businessUnits. view.on('init', function(next) { keystone.list('Title').model.find() .populate('businessUnit') .exec(function(err, results) { if(err) { console.log(err); return next(err); } else { locals.data.titlesWithNestedBusinessUnits = results; next(err); } }); }); 

作为一个侧面说明,这将只能按照.populate方法的function深入 一层 。 如果你想深入几个(相当低效),你可以使用mongoose深填充https://github.com/buunguyen/mongoose-deep-populate