是否可以使用类似于以下内容的Mongoose Schema:
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]
});
基本上,孩子只能拥有其父母所包含的类别。我正在尝试做什么?如果不是最干净的方法是什么?
答案 0 :(得分:3)
如果name
中只有一个字段categorySchema
,您可以将其放入parentSchema
,而不是population
,如下所示,
var childSchema = new Schema({
name : String,
category : {
name: String
}
});
var parentSchema = new Schema({
categories : [{name: String}],
children : [childSchema]
});
当尝试将新child
插入parent
时,您可以先查询parent
,然后重复categories
以获取现有的children
并将其添加到parent
},保存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]
});
中有许多类别使父集合过大。
children
尝试将新的parent
添加到keyUp
文档时的逻辑相同。