Обновление двух коллекций одновременно

У меня есть 2 коллекции. Одна состоит из данных, где хранятся категории, а другая коллекция с тегами. По задумке, я должен реализовать поиск по сайту по тегам(снизу скриншот). Я добавляю в одну коллекцию категории, где хранятся сами категории и их id. Далее я создаю тег, где подгружаю список этих категорий(скриншот 2). После выбора нужных категорий я передаю данные на сервер, где их и обрабатываю:

const Category = require('../models/category.model')
const Tag = require('../models/tag.model')
const slugify = require('slugify')
module.exports.createTag = async (req, res) => {
  try {
    const tag = new Tag({
      premium: req.body.premium,
      categories: req.body.categories,
      category: req.body.category,
      title: req.body.title,
      tag: slugify(req.body.title),
      description: req.body.description,
      name: req.body.name
    })
 
    await tag.save()
}

Сохранение данных в бд идет по такой модели:

const {Schema, model} = require('mongoose')
 
const tagSchema = new Schema({
  title: {
    type: String,
    required: true
  },
  category: {
    type: String,
    required: true
  },
  tag: {
    type: String,
    required: true
  },
  name: {
    type: String,
    required: true
  },
  description: {
    type: String,
    required: true
  },
  premium: {
    type: Boolean
  },
  categories: [
    {
      ref: 'categories',
      type: Schema.Types.ObjectId
    }
  ]
})
 
module.exports = model('tags', tagSchema)

А вот модель категорий:

const {Schema, model} = require('mongoose')
 
const categorieSchema = new Schema({
  name: {
    type: String,
    required: true
  },
  tags: [
    {
      type: Schema.Types.ObjectId,
      ref: 'tags'
    }
  ]
})
 
module.exports = model('categories', categorieSchema)

Категории связаны через refs. Теперь нужно сохранить в коллекции категорий, а именно, в категорию/категории которую/ые я выбрал при создании тега, айди самого тега. Вот как я это делаю:

module.exports.createTag = async (req, res) => {
  try {
    const tag = new Tag({
      premium: req.body.premium,
      categories: req.body.categories,
      category: req.body.category,
      title: req.body.title,
      tag: slugify(req.body.title),
      description: req.body.description,
      name: req.body.name
    })
//Сохранение самого тега в бд
    await tag.save()
 
// Сохранение в тега в бд категорий
    req.body.categories.forEach(async item => {
      const category = await Category.findById(item._id)
      category.tags.push(tag._id)
      await category.save()
    })
}

Перебираю массив, т.к. выбранных категорий может быть как одна, так и больше.

Все работает. При удалении тега, в категориях он автоматически удаляется. Но если я обновляю сам тег, то есть делаю другой выбор категорий, например, вместо собачек выбираю котиков и сохраняю, то сами данные обновляются(собачек категории нет при загрузке, а котики сохранились), а вот в категориях, которые я убрал, сам тег не убирается.

Вот сохранение данных:

module.exports.update = async (req, res) => {
  try {
    const $set = {
      premium: req.body.premium,
      category: req.body.category,
      categories: req.body.categories,
      title: req.body.title,
      tag: slugify(req.body.title),
      description: req.body.description,
      name: req.body.name
    }
 
    await Tag.findOneAndUpdate(
      {
        _id: req.params.id
      },
      {$set},
      {new: true}
    )
    }

введите сюда описание изображения введите сюда описание изображения


Ответы (0 шт):