Получить отдельные дни из коллекции дат в MongoDB - PullRequest
0 голосов
/ 28 января 2020

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

// collection
[{
  timestamp: ISODate("2020-01-28T20:42:00.000Z"),
  data: 1,
},{
  timestamp: ISODate("2020-01-28T18:42:00.000Z"),
  data: 10,
},{
  timestamp: ISODate("2020-01-28T15:42:00.000Z"),
  data: 100,
},{
  timestamp: ISODate("2020-01-25T15:42:00.000Z"),
  data: 1000,
},{
  timestamp: ISODate("2020-01-17T15:42:00.000Z"),
  data: 10000,
}]

сокращается до:

['2020-01-28', '2020-01-25', '2020-01-17']

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

Существует ли быстрый (er) способ запроса коллекции, чтобы вернуть отдельный набор дат, в которые существуют данные?

1 Ответ

1 голос
/ 28 января 2020

Как я знаю, вы можете получить только результат формата json из запроса mongodb.

Я мог бы получить следующий результат, который можно легко преобразовать в массив строк в коде javascript:

[
  {
    "_id": "20200125"
  },
  {
    "_id": "20200117"
  },
  {
    "_id": "20200128"
  }
]

Я использовал $ dateToString оператор агрегирования на этапе $ project.

db.collection.aggregate([
  {
    $project: {
      _id: 0,
      date: {
        $dateToString: {
          format: "%Y%m%d",
          date: "$timestamp"
        }
      }
    }
  },
  {
    $group: {
      _id: "$date"
    }
  }
])

Детская площадка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...