Mongoose / MongoDB агрегатный фильтр по нескольким диапазонам дат - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть коллекция из 365 документов.Каждый документ выглядит следующим образом:

{
  date: "2018-11-27T00:00:00.000Z",
  title: "Went to school"
},
{
  date: "2018-11-28T00:00:00.000Z",
  title: "Bought a car"
}

Я хочу фильтровать документы по нескольким диапазонам данных.Пример:

  1. Показать только документы, созданные после 2018-01-04 и до 2018-11-24
  2. Результат не должен содержать документы, созданные в интервале 2018-05-06 - 2018-06-07и т.д.

Пока я получил это:

const dates = await Calendar.aggregate(
  [{
      $match: {
        $and: [{
            date: {
              $not: {
                $lte: new Date(2018, 0, 7),
              }

            }
          },
          {
            date: {
              $not: {
                $gte: new Date(2018, 10, 15)
              }
            }
          },
          {
            date: {
              $not: {
                $gt: new Date(2018, 6, 31),
                $lt: new Date(2018, 7, 15)
              }
            }
          }
        ]
      }
    },
    {
      $project: {
        title: 1,
        date: 1
      }
    }
  ]
).sort('date')

Заранее спасибо!

1 Ответ

0 голосов
/ 27 ноября 2018

Вам необходимо использовать $lte и $gte с одним date объектом в запросе

Calendar.aggregate([
  { "$match": {
    "$and": [
      { "date": { "$lte": new Date(2018, 0, 7), "$gte": new Date(2018, 10, 15) }},
      { "date": { "$not": { "$lte": new Date(2018, 0, 7), "$gte": new Date(2018, 10, 15) }}}
    ]
  }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...