猫鼬模式是否可能类似于以下内容:
var categorySchema = new Schema({
name : String
});
var childSchema = new Schema({
name : String,
category : {
type : Schema.Types.ObjectId,
ref : 'parent.categories'
}
});
var parentSchema = new Schema({
categories : [categorySchema],
children : [childSchema]
});
基本上,子级只能具有其父级包含的类别.我想做的事可能吗?如果不是,最干净的方法是什么?
解决方法:
如果categorySchema中只有一个字段名称,也许您可以将其放到parentSchema中,而无需进行如下填充,
var childSchema = new Schema({
name : String,
category : {
name: String
}
});
var parentSchema = new Schema({
categories : [{name: String}],
children : [childSchema]
});
当尝试将新的子代插入父代时,您可以先查询父代,然后迭代类别以获取现有子代并将其添加到子代中,将父代保存为最后,示例代码如下
Parent.find({_id: parent._id})
.exec(function(err, p) {
if (err) throw err;
var p = new Child({name: 'tt'});
p.categories.forEach(function(c) {
if (c /*find the match one*/) {
p.category = c; // assign the existing category to children
}
});
// save this parent
p.save(function(err) {...});
});
如果categorySchema中有许多字段,则可以将其定义为单个模式,这是一个选择,如果Parent中有很多类别会使父集合太大.
var categorySchema = new Schema({
name : String,
// other fields....
});
var Category = mongoose.model('Category', categorySchema);
var childSchema = new Schema({
name : String,
category : {type : Schema.Types.ObjectId, ref : 'Category'}
});
var parentSchema = new Schema({
categories : [{type : Schema.Types.ObjectId, ref : 'Category'}],
children : [childSchema]
});
尝试将新的子级添加到父级文档时,逻辑与上述相同.