Как вытащить вложенный документ из массива документов в mongodb? - PullRequest
0 голосов
/ 28 апреля 2020

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

const { eventid, typesOfTicketId } = req.params;
const eventDays = await EventDate.find({event: eventid});

Здесь Eventid передается из параметров как "5e9c0f0593ab3c058e282bfa". Затем я хочу удалить запрошенный день из массива вложенных объектов. Из вышеприведенного запроса я получаю массив дат, и для каждого индекса массива документ имеет следующий формат:

[{
    "_id" : ObjectId("5ea7f54b8b22480431f1a455"),
    "day" : "1588186800",
    "typesOfTicket" : [ 
        {
            "_id" : ObjectId("5ea7f54b8b22480431f1a456"),
            "ticket" : "Adult Tickets",
            "noTickets" : 40,
            "price" : 50,
            "ticketsLeft" : 40
        }, 
        {
            "_id" : ObjectId("5ea7f54b8b22480431f1a457"),
            "ticket" : "Children Tickets",
            "noTickets" : 50,
            "price" : 30,
            "ticketsLeft" : 50
        }
    ],
    "event" : ObjectId("5e9c0f0593ab3c058e282bfa"),
    "__v" : 0
},
{
    "_id" : ObjectId("5ea7f5678b22480431f1a45f"),
    "day" : "1588273200",
    "typesOfTicket" : [ 
        {
            "_id" : ObjectId("5ea7f5678b22480431f1a460"),
            "ticket" : "Male Tickets",
            "noTickets" : 50,
            "price" : 5,
            "ticketsLeft" : 50
        }, 
        {
            "_id" : ObjectId("5ea7f5678b22480431f1a461"),
            "ticket" : "Female Tickets",
            "noTickets" : 50,
            "price" : 5,
            "ticketsLeft" : 50
        }
    ],
    "event" : ObjectId("5e9c0f0593ab3c058e282bfa"),
    "__v" : 0
}]

Я хочу найти способ удалить документ во вложенных типахOfTicket массив, например, скажем, я хочу удалить объект с id: typesOfTicketId. (например, typesOfTicketId = "5ea7f5678b22480431f1a461"), женский билет, передав его идентификатор.

Я уже пробовал этот запрос:

await EventDate.update({event: eventid}, {
   $pull: {
      typesOfTicket: {
         _id: "typesOfTicketIDHERE"
      }
   }
});

Но указанный выше запрос работает только если я Я удаляю первый индекс массива eventDays, как если бы я удалял идентификатор: «5ea7f54b8b22480431f1a456», тогда это будет работать, но если я собираюсь для идентификаторов по второму индексу, как «Женский билет» / «5ea7f5678b22480431f1a461», то это не работает.

1 Ответ

0 голосов
/ 28 апреля 2020

Я нашел решение моей проблемы, приведенный выше запрос работал корректно после нескольких настроек

await EventDate.update({event: eventid}, {
   $pull: {
      typesOfTicket: {
         _id: "typesOfTicketIDHERE"
      }
   }
}, { multi: true });

Простое указание нескольких параметров в true поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...