Получить уникальный номер бронирования на основе дат - PullRequest
0 голосов
/ 23 января 2019

Как я могу получить уникальный счетчик бронирования?Например, если я перейду с даты «1970-01-01» и на дату «1970-01-05», то мне будет возвращено только 1. Потому что есть два бронирования, но на другую дату (один из 1970-01От -01 до 1970-01-02, а другое от "1970-01-03" до "1970-01-05").

Зарезервировано массив содержит все забронированные номера с от до до даты

Вот мои данные:

[
  {
    "_id": "5c0a17013d8ca91bf4ee7885",
    "name": "ABC",
    "reserved": [
      {
        "from": "1970-01-01",
        "to": "1970-01-02",
        "isCompleted": false
      },
      {
        "from": "1970-01-03",
        "to": "1970-01-05",
        "isCompleted": false
      },
      {
        "from": "2017-04-18",
        "to": "2017-04-23",
        "isCompleted": false
      },
      {
        "from": "2018-01-29",
        "to": "2018-01-30",
        "isCompleted": false
      }
    ]
  }
]

Я пытался подсчитать, используя этот запрос, но он возвращает всеколичество не уникальное.

db.collection.aggregate([
    { $unwind: "$reserved" },
    {
        $match: { "reserved.from": { $lte: to }, "reserved.to": { $gte: from  } }
    },
    {
        $count: "total"
    }
])

РЕДАКТИРОВАТЬ-1

Я не хочу уникальное _id .Как вы видите, внутри массива резервирования есть два резервирования от даты «1970-01-01» до «1970-01-05» (т.е. одно для «1970-01-01» - «1970-01-02», а другое было »1970-01-03 "к" 1970-01-05 "), но оба не в ту же дату.поэтому, когда я сделаю запрос, мне будет подсчитано 2 .Но на самом деле это было только одно в соответствии с моим требованием, потому что я хочу посчитать, сколько уникальных бронирований было сделано за период времени, который я передаю как запрос.См. Приведенный ниже пример

Итак, если мой зарезервированный массив был таким, то он даст мне счет 1 в качестве выходного значения For (передать от даты как «1970-01-01» и до даты как «1970-01»-05 ") запрос

"reserved": [
      {
        "from": "1970-01-01",
        "to": "1970-01-02",
        "isCompleted": false
      },
      {
        "from": "1970-01-03",
        "to": "1970-01-05",
        "isCompleted": false
      }
]

И, если мой зарезервированный массив был таким, то я получу счет 2 в качестве выходного значения For (переход от даты как" 1970-01-01 "и к дате как«1970-01-05») запрос

"reserved": [
      {
        "from": "1970-01-01",
        "to": "1970-01-02",
        "isCompleted": false
      },
      {
        "from": "1970-01-03",
        "to": "1970-01-05",
        "isCompleted": false
      },
      {
        "from": "1970-01-03",
        "to": "1970-01-05",
        "isCompleted": false
      }
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...