如何在堆栈 MERN 中建立这种关系?
How make this relation in stack MERN?
我有网上商店,那里有产品和类别。该产品在型号字段中有
category: {
type: Types.ObjectId,
ref: "Category",
required: [true, "Product category is required"]
},
当我添加新产品 select 类别(在列表中存在)并添加 ID 时。
但是如果去掉category,商品的categoryId是不存在的。是否可以实现 wordpress 中使用的功能。例如在wordpress中我删除分类,所有有这个分类的帖子,转移到未分类的分类中(这个分类自动创建,不能删除)
如果我没理解错的话,你可以使用mongoose middlewares来“级联删除”。因此,当一个类别被删除时,您可以编码每个产品现在都有“未分类”
您可以在调用删除函数时使用 pre
挂钩并执行如下操作(未使用您的模式进行测试):
category.pre(/(?:delete|remove)/, function(next) {
var id = this.getQuery()._id; //get category _id
product.updateMany({
category: id
},{
$set:{
category:yourUncategorizedId
}
}).then(next()).catch(e => next(e))
})
因此,在这种情况下,regex
匹配用于进入钩子。
当从 category
模型调用 remove
或 delete
函数时调用此挂钩。因此,当删除类别时,此挂钩将更新您 uncategorizedId
的所有引用,以确保任何产品都有不存在的 category
引用。
我有网上商店,那里有产品和类别。该产品在型号字段中有
category: {
type: Types.ObjectId,
ref: "Category",
required: [true, "Product category is required"]
},
当我添加新产品 select 类别(在列表中存在)并添加 ID 时。
但是如果去掉category,商品的categoryId是不存在的。是否可以实现 wordpress 中使用的功能。例如在wordpress中我删除分类,所有有这个分类的帖子,转移到未分类的分类中(这个分类自动创建,不能删除)
如果我没理解错的话,你可以使用mongoose middlewares来“级联删除”。因此,当一个类别被删除时,您可以编码每个产品现在都有“未分类”
您可以在调用删除函数时使用 pre
挂钩并执行如下操作(未使用您的模式进行测试):
category.pre(/(?:delete|remove)/, function(next) {
var id = this.getQuery()._id; //get category _id
product.updateMany({
category: id
},{
$set:{
category:yourUncategorizedId
}
}).then(next()).catch(e => next(e))
})
因此,在这种情况下,regex
匹配用于进入钩子。
当从 category
模型调用 remove
或 delete
函数时调用此挂钩。因此,当删除类别时,此挂钩将更新您 uncategorizedId
的所有引用,以确保任何产品都有不存在的 category
引用。