Агрегат и $ или оператор в MongoDB - PullRequest
1 голос
/ 02 февраля 2020

Это мой запрос mongodb:

Booking.aggregate([
  { $match:
    { $and: [
      { $or: [
          { isDoubleRoom },
          { chosenRoom }
        ]},
      { month },
      { year },
    ] }},
  { $group: { _id: "$fullDate", count: { $sum: 1 } } }
]

На первом этапе я хотел бы отфильтровать по месяцу, году и условно: если isDoubleRoom, то фильтровать только по двойным комнатам, если нет, то фильтровать свойство selectedRoom. Дело в том, что $ или не переключается между фильтрами. Запрос возвращает не отфильтрованные (по выбранному isDoubleRoom $ или selectedRoom) результаты. То же самое сработало, когда я использовал его с find вместо aggregate. Но здесь мне нужно aggregate для подсчета отфильтрованных результатов.

1 Ответ

0 голосов
/ 02 февраля 2020

Вы должны использовать $ cond

{
    $match: {
        $and: [
            {
                $cond: [{isDoubleRoomBool}, {isDoubleRoom} , {chosenRoom}] //
            },
            { month },
            { year },
        ]
    }
}
...