我找不到对我的问题的任何回应。可能也是一个搜索问题,但会感激一些帮助。 我有以下型号:
var ChildSchema = new Schema ({
'name': string
});
var ClassSchema = new Schema ({
'name': string,
'children': [ChildSchema]
});
我只为类声明了一个模型。
mongoose.model ('Class', ClassSchema);
然后我有另一个模型:
var TeacherSchema = new Schema ({
'name': string,
'favorite': {type: ObjectId, ref: 'Class.children'} // a child from class children
'least': {type: ObjectId, ref: 'Class.children'} // same as above
});
使用相关模型:
mongoose.model ('Teacher', TeacherSchema);
我正在尝试按ID检索教师并填写子名称:
Teacher.findbyId (teacherId).populate (favorite least)...
这似乎不起作用。这个建模是否正确?这可能吗?
(我知道我的例子在政治上可能不正确,所以请原谅我......)
修改 这是项目中某些事物的反映。我知道孩子们可以被建模为单独的集合,但在我的项目中,我更喜欢将它们保存为嵌入式文档(出于各种原因)。 当推入子数组并保存类时,每个子节点都会获得一个_id。教师需要指向“最喜欢”和“最少”的班级中的单个孩子,即保留该孩子的_id。
答案 0 :(得分:1)
答案似乎是:不可行。 github.com/Automattic/mongoose/issues/2772 另外 - 找不到合适的插件。
答案 1 :(得分:0)
我有类似的问题。至少如果你有一个回到Child的Class的引用,这可能有效:
var TeacherSchema = new Schema ({
'class': {type: ObjectId, ref: 'Class'}
'name': string,
'_favorite': {type: ObjectId, ref: 'Class.children'} // a child from class children
'_least': {type: ObjectId, ref: 'Class.children'} // same as above
});
TeacherSchema.virtual('favorite').get(function() {
return this.class.children.id(this._favorite);
});
TeacherSchema.virtual('favorite').set(function(favorite) {
this._favorite = favorite;
});
TeacherSchema.virtual('least').get(function() {
return this.class.children.id(this._least);
});
TeacherSchema.virtual('least').set(function(least) {
this._least = least;
});
TeacherSchema.set('toJSON', { getters: true, virtuals: true });
只要教师只有一个班级,这就有效。