Mongoose Вытяните один элемент из вложенного массива по ObjectID

У меня есть схема Schedule, и я пытаюсь получить элемент из вложенного массива slotsPerDay.

const scheduleSchema =  mongoose.Schema({
    course_id: {{type: mongoose.Schema.Types.ObjectId, ref: 'course' }}, 
    week_schedule: [{
        day: {type: String, required: true },
        slotsPerDay: [{type: mongoose.Schema.Types.ObjectId, ref: 'slots' }],
    }]
});

Я пытаюсь удалить определенный идентификатор объекта слота из массива slotsPerDay, который инкапсулирован внутри массива week_schedule следующим образом.

 SchemaModel.findOneAndUpdate(
         {course_id: req.body.course_id},
         { "$pull": { "week_schedule": { "slotsPerDay": {"_id": req.body.slotID }}}}
 ,{new:true})

Однако этот запрос удаляет весь массив week_schedule со всеми его слотами, а не только тот, который сопоставлен с идентификатором слота, указанным в запросе. Любая помощь исправить это?

Я пробовал { "$pull": { "week_schedule.slotsPerDay": {"_id": req.body.slotID }}} но я получаю ошибку

Невозможно использовать часть (slotsPerDay) из (week_schedule.slotsPerDay) для пройти элемент ({week_schedule: [ { slotsPerDay: [ ObjectId('5fe0263872f7b53aac93334a'), ObjectId('5fe0263872f7b53aac933349'), ObjectId('5fe0263872f7b53aac93334b'), ObjectId('5fe0263872f7b53aac93334c'), ObjectId('5fe0263872f7b53aac93334d'), ObjectId('5fe0263872f7b53aac93334e'), ObjectId('5fe0263872f7b53aac93334f'), ObjectId('5fe0263872f7b53aac933350') ], _id: ObjectId('5fe0266a72f7b53aac933364'), день: "Суббота" }, { slotsPerDay: [], _id: ObjectId('5fe0266a72f7b53aac933365'), день: "Воскресенье" }, { slotsPerDay: [], _id: ObjectId('5fe0266a72f7b53aac933366'), день: "Понедельник" }, { slotsPerDay: [Ид_объекта('5fe0263872f7b53aac933356'), ObjectId('5fe0263872f7b53aac933357'), ObjectId('5fe0263872f7b53aac933359'), ObjectId('5fe0263872f7b53aac93335a') ], _id: ObjectId('5fe0266a72f7b53aac933368'), день: "Среда" }, { slotsPerDay: [ ObjectId('5fe0263872f7b53aac93335b'), ObjectId('5fe0263872f7b53aac93335c'), ObjectId('5fe0263872f7b53aac93335d'), ObjectId('5fe0263872f7b53aac93335e'), ObjectId('5fe0263872f7b53aac93335f'), ObjectId('5fe0263872f7b53aac933360'), ObjectId('5fe0263872f7b53aac933361'), ObjectId('5fe0263872f7b53aac933362') ], _id: ObjectId('5fe0266a72f7b53aac933369'), день: "четверг" } ]})

Вы пытаетесь удалить день из массива week_schedule или элемент из вложенного массива slotsPerDay?

Montgomery Watts 22.12.2020 22:37

элемент из вложенного SlotsPerDay

HR1 22.12.2020 22:44
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
779
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуй это:

SchemaModel.findOneAndUpdate(
     { course_id: req.body.course_id },
     { $pull: { "week_schedule.$[].slotsPerDay": req.body.slotID }},
     { new: true })

Он использует все позиционный оператор, $[]. Для всех элементов массива week_schedule он извлекает элементы из вложенного массива slotsPerDay со значением, равным req.body.slotID.

Другие вопросы по теме