MongoDB find () - пытается создать сложный запрос даты - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь написать довольно сложный запрос MongoDB, который возвращает набор результатов (событий), отфильтрованных только для будущих событий.

К сожалению, схема данных этих событий немного расстраивает.Пользователь может настроить событие с определенной датой окончания (это нормально для работы), или он может выбрать повторение, которое заканчивается на определенную дату (также хорошо) ..

, однако они также могут выбратьвозможность для события повторяться каждые X дней / недель / месяцев (есть поле типа, чтобы выбрать какой из них) для общего количества повторений Y.Поэтому, если я хочу рассчитать эффективную дату окончания, мне нужно использовать все три эти переменные в моем запросе.

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

Вот условие, которое я построил до сих пор, я пытаюсь завершить 3 строки, которые имеют / * * / comments.

Если кто-нибудь знаетспособ сделать это, я был бы очень признателен за любую помощь.Спасибо!

$or: [
    { 'when.endingDate': { $gte: new Date() } },
    { 'when.recurring.forever': { $eq: true } },
    { 'when.multipleDays': { $eq: true } },
    {
      $and: [
        { 'when.recurring.occurences': { $gte: 1 } },
        { $or: [
          { $and: [
            { 'when.recurring.type': { $eq: 'day' } },
            { /* when.endingDate + when.recurring.occurences * when.recurring.every * days >= new Date() */ }
          ] },
          {
            $and: [
              { 'when.recurring.type': { $eq: 'week' } },
              { /* when.endingDate + when.recurring.occurences * when.recurring.every * week >= new Date() */ }
            ]
          },
          {
            $and: [
              { 'when.recurring.type': { $eq: 'month' } },
              { /* when.endingDate + when.recurring.occurences X when.recurring.every * month >= new Date() */ }
            ]
          }
        ] }
      ]
    },
    { $and: [
      { 'when.repeat': { $eq: true } },
      { 'when.recurring.until': { $gte: new Date() } }
    ] }
  ]

1 Ответ

0 голосов
/ 17 февраля 2019

Вы пытаетесь втиснуть всю бизнес-логику в свой запрос mongodb.

Я бы выбрал один из следующих подходов:

  • потоковая передача БД в приложение и запусквышеуказанная логика на реальном языке программирования (предпочтительно);
  • подготавливает данные для вышеуказанного запроса.создайте вспомогательные поля и регулярно обновляйте их с помощью запланированного задания.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...