我正在尝试为Contest
集合编写 KeystoneJS (Mongoose) 模型。这些是我的实际模型的简化版本:
比赛
Contest.add({
title: {
type: Types.Text,
initial: true,
required: true,
index: true
},
state: {
type: Types.Select,
options: ['draft', 'started', 'finished', 'resolved'],
default: 'draft'
},
awards: {
idContest: { /* <--- copy of _id */
type: Types.Text,
hidden: true
},
jury: {
winner: {
type: Types.Relationship,
ref: 'Entry',
many: false,
filters: {
'contest.id': ':idContest', /* <--- filter */
'contest.state': 'admited'
}
}
}
}
});
入口
Entry.add({
title: {
type: Types.Text,
initial: true,
required: true,
index: true
},
author: {
type: Types.Relationship,
ref: 'User',
initial: true,
index: true
},
contest: {
id: {
type: Types.Relationship,
ref: 'Contest',
index: true
},
state: {
type: Types.Select,
options: ['none', 'review', 'admited', 'rejected'],
default: 'none',
}
}
});
如您所见,我正在尝试过滤winner
关系以仅显示参与本次比赛的条目。但是我无法在比赛中做到这一点,id
所以_id
我只是创建了一个新的虚拟字段awards.idContest
,其中充满:
Contest.schema.pre('save', function(next) {
this.awards.idContest = (this.id || this._id);
next();
});
我怎样才能完成相同但没有额外的字段?就像是:
jury: {
winner: {
type: Types.Relationship,
ref: 'Entry',
many: false,
filters: {
'contest.id': ':id',
'contest.state': 'admited'
}
}
}