У меня есть модель данных с вложенными объектами, и я хотел бы обновить поле «доступные» на «зарезервированные», используя основной идентификатор объекта, а также дату и время, связанные с вложенным объектом. Вот мои данные ...
{
"_id": {
"$oid": "5bf1a675041f242cda138d1c"
},
"availability": [
{
"_id": {
"$oid": "5bf2c077d5683c38afacf34b"
},
"date": "2018-12-20 ",
"time": " 11:00 - 12:00 ",
"status": "reserved"
},
{
"_id": {
"$oid": "5bf2c3bb8b95bd3a7cb3eabe"
},
"date": "2018-11-30",
"time": "18:00 - 19:00",
"status": "available"
}
],
"name": "blah",
"price": 50,
"city": "blah",
"__v": 0
}
И код, который я пытаюсь ...
router.get('/reserve/:id', function(req, res, next){
//I've other stuff here that sets the correct variables according to the console.log, so str2[0] contains the date I want to find, etc.
Pitch.findOneAndUpdate({
id: req.params.id,
'availability.date': 'str2[0]', //passing in 2018-11-30
'availability.time': 'str2[1]', //passing in 18:00 - 19:00
'availability.status': 'available'
},
{$set: {
'availability.$.status': 'reserved'
}
})
Тем не менее, объект не будет обновляться и устанавливать статус «зарезервирован». Кто-нибудь может определить, что я делаю не так? Должен ли я попытаться получить доступ к определенному объекту, используя другие условия?
РЕДАКТИРОВАТЬ: методом проб и ошибок, я думаю, проблема в том, что часть 'find' возвращает родительский объект, а все его подобъекты в массиве 'Availability' возвращаются. Часть «обновление» не знает, какой «статус» обновлять, и в данный момент происходит сбой.
Я возвращал дату и время из формы в интерфейсе пользователя и думал, что смогу идентифицировать объект в массиве по его родительскому идентификатору плюс дата и время резервирования.
Итак, я полагаю, что мой вопрос должен состоять в том, что, поскольку идентификатор, возвращаемый в URL-адресе, является идентификатором родительского объекта, существует ли способ уникального извлечения указанного объекта доступности (например, 5bf2c3bb8b95bd3a7cb3eabe) и обновления его статуса на «зарезервированный»?
РЕДАКТИРОВАТЬ 2: Я также могу «найти» элемент по его «available._id», но возвращается полный родительский объект, поэтому часть «update status» не работает, так как она слишком широкая.