Выполните pu sh и соберите в mongodb через mon goose Express - PullRequest
0 голосов
/ 04 мая 2020

Я попал в ситуацию, когда мне нужно выполнить pu sh и собрать вместе.

У меня есть схема категорий и сообщений, где сообщения могут иметь несколько категорий, а категории будут иметь массив из нескольких сообщений. используя метод Object Referencing для mon goose следующим образом:

    PostSchema= new mongoose.Schema({
      title:{type:String, required:true},
      content:{type:String, required:true}, 
      categories:[{type:mongoose.Schema.Types.ObjectId, ref:'Categories'}]     
})

Таким же образом я настроил схему для категорий -

   CatSchema = new mongoose.Schema({
      name:{type:String, required:true},
      slug:{type:String, required:true}, 
      posts:[{type:mongoose.Schema.Types.ObjectId, ref:'Posts'}]     
})

. Теперь, когда я создаю сообщение, я пу sh postId во всех категориях коллекции Categories.

Но ПРОБЛЕМА ПРОИСХОДИТ, когда я пытаюсь ОБНОВИТЬ ПОСТ И ВЫБРАТЬ РАЗЛИЧНЫЕ КАТЕГОРИИ с более раннего времени этого времени.

Я все еще могу pu sh обновленный postId в новые выбранные категории, но как извлечь postId из тех категорий, которые не были выбраны во время обновления, но были выбраны во время создания. Они по-прежнему хранят этот postId так, как он был изначально выдвинут.

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

1 Ответ

0 голосов
/ 04 мая 2020

Я понимаю, что для этого обновления вам нужны postID, arrayOldCaretoryiesID и arrayNewCategoriesID.

Давайте найдем и удалим из текущего поста нужную вам категорию.

const deletedCatFromPost = await Post.updateOne({ _id: postID }, { $pull: { categories: arrayOldCaretoryiesID } })

Во-вторых, удалите из старые категории с помощью массива идентификаторов нужного вам сообщения.

const removedOldCategories = await Categories.updateMany({_id:{$or: arrayOldCaretoryiesID }},{ $pull:{ posts: postID }})

Наконец, добавьте к новым категориям массив идентификаторов нового идентификатора postID.

const addNewCategories = await Categories.updateMany({_id: { $or: arrayNewCategoriesID} },{$push:{ posts: postID }})

Надеюсь, это поможет вам .

Обновление :

Во-вторых, удалите из старых категорий массивом идентификаторов нужную запись.

const removedOldCategories = await Categories.updateMany({_id:{$in: arrayOldCaretoryiesID }},{ $pull:{ posts: postID }})
...