Найти минимальное и максимальное значение из массива в mongodb - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть следующая коллекция проектов

Project Collection :

[
{
    Id : 1,
    name : p1,
    tasks : [{
        taskId : t1,
        startDate : ISODate("2018-09-24T10:02:49.403Z"),
        endDate : ISODate("2018-09-26T10:02:49.403Z"),
    },
    {
        taskId : t2,
        startDate : ISODate("2018-09-24T10:02:49.403Z"),
        endDate : ISODate("2018-09-29T10:02:49.403Z"),
    },
    {
        taskId : t3,
        startDate : ISODate("2018-09-24T10:02:49.403Z"),
        endDate : ISODate("2018-09-27T10:02:49.403Z"),
    }]
}
]

Как получить startDate и EndDate проекта p1 в зависимости от выполнения задачи, т.е. минимальную дату начала и максимальную конечную дату в массиве задач

Пример.Проект P1 содержит 3 разных задания с разными датами. Я просто хочу получить конечную дату начала и дату окончания проекта p1

Output should be
result : [{
  Id : 1,
  name : p1,
  startDate : ISODate("2018-09-24T10:02:49.403Z"), //min date 
  endDate : ISODate("2018-09-29T10:02:49.403Z") //max date
}]

1 Ответ

0 голосов
/ 24 сентября 2018

Вы можете попробовать запрос ниже, используя $max оператор агрегирования.

db.collection.aggregate([
  { "$project": {
    "name": 1,
    "startDate": { "$min": "$tasks.startDate" },
    "endDate": { "$max": "$tasks.endDate" }
  }}
])

Выход

[
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "endDate": ISODate("2018-09-29T10:02:49.403Z"),
    "name": "p1",
    "startDate": ISODate("2018-09-24T10:02:49.403Z")
  }
]
...