У меня есть схема 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'), день: "четверг" } ]})
элемент из вложенного SlotsPerDay
Попробуй это:
SchemaModel.findOneAndUpdate(
{ course_id: req.body.course_id },
{ $pull: { "week_schedule.$[].slotsPerDay": req.body.slotID }},
{ new: true })
Он использует все позиционный оператор, $[]
. Для всех элементов массива week_schedule
он извлекает элементы из вложенного массива slotsPerDay
со значением, равным req.body.slotID
.
Вы пытаетесь удалить день из массива
week_schedule
или элемент из вложенного массиваslotsPerDay
?