如何在堆栈 MERN 中建立这种关系?

Posted

技术标签:

【中文标题】如何在堆栈 MERN 中建立这种关系?【英文标题】:How make this relation in stack MERN? 【发布时间】:2021-04-19 03:33:06 【问题描述】:

我有网上商店,其中存在产品和类别。该产品在模型领域有

 category: 
    type: Types.ObjectId,
    ref: "Category",
    required: [true, "Product category is required"]
  ,

当我添加新产品时,选择类别(列表中存在)并添加 id。

但如果删除类别,产品的 categoryId 不存在。是否可以实现 wordpress 中使用的功能。例如,如果在 wordpress 中我删除了类别,则所有具有此类别的帖子,都转移到未分类的类别中(此类别自动创建且无法删除)

【问题讨论】:

【参考方案1】:

如果我理解正确,您可以使用mongoose middlewares 来“级联删除”。因此,当一个类别被删除时,您可以编码每个产品现在都“未分类”

您可以在调用 delete 函数并执行以下操作时使用 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 模型调用 removedelete 函数时,将调用此钩子。因此,当一个类别被删除时,此挂钩将更新您的 uncategorizedId 的所有引用,以确保任何产品都有一个不存在的 category 引用。

【讨论】:

以上是关于如何在堆栈 MERN 中建立这种关系?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MERN 堆栈中发送响应模式?

如何在 mern 堆栈中发布对特定数组字段的请求

如何在 MERN 堆栈中向用户显示错误

如何将图像上传到 Cloudinary - MERN 堆栈

如何解决这个 MERN 堆栈 filebase64 错误?

mern 堆栈中的路由是如何处理的?