Удалить только те, которые не имеют записи в первой таблице, соответствующей второй таблице - PullRequest
0 голосов
/ 25 сентября 2018
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
});

У меня есть две схемы, которые я удаляю из категории, но если у меня есть данные, соответствующие этой категории в таблице продуктов, эта категория не должна быть удалена.Кто-нибудь может помочь?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Во-первых, обновите свойство "type" поля "category" в схеме продукта следующим образом:

category:{
  type:  Schema.Types.ObjectId,
  ref: 'Category' // model name
}`

и объявите модель следующим образом:

var Product = mongoose.model('Product', productSchema );

, затем используйте "Differentзапрос и оператор запроса $ nin для удаления категории, на которую не ссылается схема продукта, например:

Product.find().distinct('category').then((data)=>{
   Category.deleteMany({_id: {$nin: data}}).then(del => {
       console.log("deleted",del)
   })
})
0 голосов
/ 25 сентября 2018

это должно выглядеть примерно так:

     // 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'
},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...