我有一个用于产品类别(MongoDB)的keystonejs模型。一些类别应具有子类别。目前,我已经设置了一个关系字段“ ChildCategoryOf”,在这里我可以在管理面板中手动选择“父类别”。为了具有更多功能,我想创建另一个名为“ ParentCategoryOf”的字段,该字段将包含一个子类别数组。如何有一个自动在数组中存储子类别的字段?我想像这样:
当前型号:
let ProductCategory = new keystone.List('ProductCategory', {
autokey: {
from: 'name',
path: 'key',
unique: true
}
});
ProductCategory.add({
name: {
type: String,
required: true
},
ChildCategoryOf: {
type: Types.Relationship,
ref: 'ProductCategory',
many: false,
required: false,
},
IsParentCategory: Types.Boolean,
});
答案 0 :(得分:0)
对于mongo中的类别,您可以使用类似模型的继承方式,在其中可以存储每个模型及其子级的parentId和祖先ID,然后在mongoose模型中添加方法以在每次调用它时添加一个子级一个实例,就像下面的代码:
const ProductCategory = new Schema({
name: String,
parent: { type: Schema.Types.ObjectId, ref: 'ProductCategory'},
ancestors: [{type: Schema.Types.ObjectId, ref: 'ProductCategory'}],
children: [{type: Schema.Types.ObjectId, ref: 'ProductCategory'}]
});
ProductCategory.methods = {
addChild: function(child){
let that = this;
child.parent = this._id;
child.ancestors = this.ancestors.concat([this._id]);
return this.model('ProductCategory').create(child).addCallback
(function(child){
that.children.push(child._id);
that.save();
});
}
};
然后在以后要从其类别中查找产品的位置时,应结合使用其子级ID来找到的类别ID,并在$ in运算符的find查询中使用此数组来查找其子级中的所有产品