Соответствует переменной для запроса mongodb, только если она существует - PullRequest
0 голосов
/ 24 августа 2018

Я использую агрегат, чтобы вернуть список пользователей, которые соответствуют определенным критериям.Проблема в том, что переменные, которые я получаю из внешнего интерфейса, не всегда устанавливаются.

Поэтому я должен сделать что-то вроде этого:

const match = {};

if (status) {
  match.status = status;
}

if (startDate && endDate) {
  match.createdAt = { $gte: startOfDay(startDate), $lte: endOfDay(endDate) };
}

await User.aggregate([
  {
     $match: match,
  },
]);

Есть ли способ написать это прямо внутризапрос без использования переменной match вне агрегата?

1 Ответ

0 голосов
/ 24 августа 2018

Вы можете попробовать что-то вроде:

    db.User.find(
            { $or: 
               [ { $and: [ { "status": { $exists: true } },{ "status": status } ] }, 
                 { $and: [ { "endDate": { $exists: true } },
                           { "startDate": { $exists: true } }, 
                           { $gte: startOfDay(startDate), $lte: endOfDay(endDate) }] } 
               ] })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...