MongoDB:除了累加器之外,在分组期间包括字段

MongoDB: Include fields during grouping in addition to accumulator

在 collection 中,我有这样的条目:

{
  _id: new ObjectId("61cae11f8fc0b2e3b045be04"),
  location: 'Station One',
  datetime: 2019-02-02T12:54:57.937Z,
  sensorType: 'temperature',
  value: -1.8,
  __v: 0
},
{
  _id: new ObjectId("61cae11f8fc0b2e3b045be05"),
  location: 'Station two',
  datetime: 2019-02-02T09:49:39.200Z,
  sensorType: 'temperature',
  value: -2,
  __v: 0
},

当我进行聚合查询时,我会匹配某些东西,例如要包含哪些日期等,然后在分组中,我想搜索匹配时间段内该站的最低和最高温度.我有以下分组部分

let group = {
    _id: {location: '$location'},
    max: { $max: '$value' },
    min: { $min: '$value' },
}

这给了我正确的结果,如下所示:

[
  {
    _id: { location: "Station One" },
    max: 2.3,
    min: -22.4
  },
  {
    _id: { location: 'Station Two' },
    max: 9.8,
    min: -9.8
  }
]

我想要做的是为记录的特定温度添加日期时间,如下所示:

[
  {
    _id: { location: "Station One" },
    max: 2.3, **DATETIME HERE**
    min: -22.4 **DATETIME HERE**
  },
  {
    _id: { location: 'Station Two' },
    max: 9.8, **DATETIME HERE**
    min: -9.8 **DATETIME HERE**
  }
]

我是 mongo 的新手,我尝试了各种方法都没有成功,例如:

let group = {
    _id: {location: '$location'},
    max: { $max: '$value', $first: '$datetime' },
    min: { $min: '$value' },
}

这次尝试给我一个错误,max must have one accumulator。

如何将日期时间添加到最小值和最大值?

感谢@Prasad_ 的推荐,聚合管道可以简化为:

  1. $sort - 按 locationvalue 升序排序。
  2. $group - 按 location 分组。使用 $first 获取最小值为 value 的文档。 $last 获取最大 value.
  3. 的文档
  4. $project - 修饰输出文档。
db.collection.aggregate([
  {
    $sort: {
      location: 1,
      value: 1
    }
  },
  {
    $group: {
      _id: {
        location: "$location"
      },
      min: {
        $first: "$$ROOT"
      },
      max: {
        $last: "$$ROOT"
      }
    }
  },
  {
    $project: {
      _id: 1,
      max: {
        value: "$max.value",
        datetime: "$max.datetime"
      },
      min: {
        value: "$min.value",
        datetime: "$min.datetime"
      }
    }
  }
])

Sample Mongo Playground