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_ 的推荐,聚合管道可以简化为:
$sort
- 按 location
和 value
升序排序。
$group
- 按 location
分组。使用 $first
获取最小值为 value
的文档。 $last
获取最大 value
. 的文档
$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"
}
}
}
])
在 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_ 的推荐,聚合管道可以简化为:
$sort
- 按location
和value
升序排序。$group
- 按location
分组。使用$first
获取最小值为value
的文档。$last
获取最大value
. 的文档
$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"
}
}
}
])