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

标签 arrays mongodb mongodb-query aggregation-framework aggregate

我有以下项目集合

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 即任务数组中的最小开始日期和最大结束日期

示例。 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
}]

最佳答案

您可以使用 $max 尝试以下查询聚合运算符。

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

Output

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

关于arrays - 从 mongodb 数组中查找最小值和最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52481011/

相关文章:

c++ - 如何用 NULL 填充指针数组?

mongodb - 当 MongoDB 集群中的一个分片用完磁盘空间时会发生什么?

mongodb - 当删除子文档时,如何在 Mongoose 中删除其父文档中的引用?

java - 如何使用java在mongodb中搜索文档并从中删除字段?

MongoDB:数据分区上的磁盘I/O利用率已消失

c++ - Ogre3d 场景节点数组

JAVA - 如何创建对象数组?

java - 按字母排序字符串数组,然后按数字排序

ruby-on-rails - 如何在 Mongoid 中更改文档的 _type?

regex - 如何使用 mongoose find 获取包含部分字符串的所有值?