在mongodb中从数组中查找最小值和最大值

在mongodb中从数组中查找最小值和最大值

本文介绍了在mongodb中从数组中查找最小值和最大值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下项目收藏

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"),
    }]
}
]

如何根据任务执行情况获取p1项目的startDate和EndDate即任务数组中的最小开始日期和最大endDate

How to get p1 project's startDate and EndDate depending on task executioni.e min start date and max endDate in task array

示例. P1项目包含3个不同的任务,具有不同的日期我只想获取项目 p1

Example. P1 project contain 3 different task with different dateI just want to get final start date and end date for project 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
}]

推荐答案

您可以使用 $max 聚合运算符.

You can try below query using $max aggregation operator.

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")
  }
]

这篇关于在mongodb中从数组中查找最小值和最大值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-14 22:51