仅删除与第二个表对应的第一个表中没有条目的那些
Posted
技术标签:
【中文标题】仅删除与第二个表对应的第一个表中没有条目的那些【英文标题】:Delete only those, which have no Entry in first table corresponding to the second table 【发布时间】:2019-02-28 14:51:59 【问题描述】:var productSchema = Schema(
product_code: String,
name:
type: String,
required: true
,
description: String,
category:
type: String,
ref: 'Product_Category'
,
umo: String,
threshold:
type:Number,
default: 0
,
image: String,
isactive:
type: Boolean,
default: true
);
var product_categorySchema = Schema(
isactive:
type: Boolean,
default: true
,
name:
type: String,
required: true
,
description: String
);
我要从类别中删除这两个架构,但如果我在产品表中有与该类别对应的数据,则不应删除该类别。有人可以帮忙吗?
【问题讨论】:
【参考方案1】:首先,请像这样更新产品架构中“类别”字段的“类型”属性:
category:
type: Schema.Types.ObjectId,
ref: 'Category' // model name
`
并像这样声明模型:
var Product = mongoose.model('Product', productSchema );
然后使用“distinct”查询和“$nin”查询运算符删除产品架构未引用的类别,如下所示:
Product.find().distinct('category').then((data)=>
Category.deleteMany(_id: $nin: data).then(del =>
console.log("deleted",del)
)
)
【讨论】:
【参考方案2】:它应该看起来像这样:
// Function which delete the category behind the given _id
async function deleteCategory(idCategory)
// check if there is a product related to the category
const ret = await product_schema.findOne(
category: idCategory,
);
// if there is, return an error
if (ret) throw new Error('Cannot delete the category');
// else do delete the category
return product_category_schema.remove(
_id: idCategory,
);
你也必须知道:
category:
type: String,
ref: 'Product_Category'
,
不是设置参考的正确方法;它应该是 ObjectId
而不是 String
const
Schema,
= mongoose;
category:
type: Schema.Types.ObjectId,
ref: 'Product_Category'
,
【讨论】:
您是在模式文件中还是在 nodeJS 端编写函数。因为曾尝试在架构中工作,但没有帮助 在 node.js 端以上是关于仅删除与第二个表对应的第一个表中没有条目的那些的主要内容,如果未能解决你的问题,请参考以下文章