получить объект в массиве с условием mongodb

#javascript #node.js #reactjs #mongodb #mongoose

Вопрос:

у меня есть MONGODB база данных для таких мест, как ресторан или кафе, и в каждом месте есть Array Of Object ТАБЛИЦЫ с именами, и у каждого объекта есть Number of table, and Array of booking Dates and details пользователь, который может забронировать любую таблицу по дате и времени, поэтому я хочу проверить доступные таблицы и вернуть таблицу, которая не была забронирована в это время, которую пользователь хочет забронировать..

ВОТ МОЯ СХЕМА МАССИВА ТАБЛИЦ

 tables: [
      {
        num: Number,
        isBooked: {
          type: Boolean,
          default: false,
        },
        bookings: [
          {
            User: {
              type: mongoose.Schema.Types.ObjectId,
              ref: "Users",
            },
            Name: {
              type: String,
            },
            Date: {
              type: String,
            },
            Time: {
              type: String,
            },
            Note: {
              type: String,
            },
            numOfPersons: {
              type: Number,
            },
          },
        ],
      },
    ],
 

и если пользователь хочет забронировать столик в 20/8/2021 , 4:00 вечера, мы должны проверить свободный столик для этого пользователя в указанное время, мы должны проверить наличие столов и вернуть свободный столик, когда мы введем в него информацию о бронировании..

я попытался выполнить какой-то запрос, но всегда возвращал все место, а не только доступную таблицу..

     const stringDate = new Date(date).toLocaleDateString();
    const placeId = req.body.placeId;

    const availableTable = await Places.findOne({
      _id: placeId,
      "tables[0].bookings": {
        $not: {
          $elemMatch: { $and: [{ Date: stringDate }, { Time: time }] },
        },
      },
    });
    
    availableTable.isBooked = true;
    availableTable.bookings.push({
      Name: name,
      Time: time,
      Date: stringDate,
      numOfPersons: parseInt(personsNumber),
      Note: note,
      User: userId,
    });
   await availableTable.save()