Обновление поля во вложенном объекте при выполнении нескольких условий с помощью Mongoose - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть модель данных с вложенными объектами, и я хотел бы обновить поле «доступные» на «зарезервированные», используя основной идентификатор объекта, а также дату и время, связанные с вложенным объектом. Вот мои данные ...

{
"_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» не работает, так как она слишком широкая.

1 Ответ

0 голосов
/ 19 ноября 2018
Pitch.findOneAndUpdate({
     id: req.params.id,
    'availability.status': 'available'
       },
   {$set: {
            'availability.$.status': 'reserved',
            'availability.$.date': 'str2[0]', //passing in 2018-11-30
            'availability.$.time': 'str2[1]', //passing in 18:00 - 19:00
        }
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...