如何在堆栈 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 模型调用 removedelete 函数时调用此挂钩。因此,当删除类别时,此挂钩将更新您 uncategorizedId 的所有引用,以确保任何产品都有不存在的 category 引用。