【发布时间】:2021-12-28 09:08:44
【问题描述】:
我的mongodb文档如下:
[
{
_id: '5e839a223552e431fxd3c979',
dateTime: '2020-03-31T19:29:41.259Z',
regionId: 'eg',
transId: 'serviceFee',
revenue: 30,
details: {
serviceId: 'serv_a'
}
},
{
_id: '5e839a223559e431fxd3c979',
dateTime: '2020-03-31T19:29:42.259Z',
regionId: 'eg',
transId: 'serviceFee',
revenue: 10,
details: {
serviceId: 'serv_b'
}
},
{
_id: '5e839a223552ed82fxd3c979',
dateTime: '2020-03-31T19:29:43.259Z',
regionId: 'eg',
transId: 'serviceFee',
revenue: 15,
details: {
serviceId: 'serv_a'
}
},
{
_id: '5e8902223552e431fxd3c979',
dateTime: '2020-03-31T19:29:44.259Z',
regionId: 'eg',
transId: 'serviceFee',
revenue: 55,
details: {
serviceId: 'serv_a'
}
},
{
_id: '5e839a223552e43jjid3c979',
dateTime: '2020-03-31T19:29:45.259Z',
regionId: 'eg',
transId: 'serviceFee',
revenue: 7,
details: {
serviceId: 'serv_b'
}
},
{
_id: '5e839a223552e431fx0c3979',
dateTime: '2020-03-31T19:29:46.259Z',
regionId: 'eg',
transId: 'serviceFee',
revenue: 120,
details: {
serviceId: 'serv_c'
}
},
{
_id: '5e839a22ggt2e431fxd3c979',
dateTime: '2020-03-31T19:29:47.259Z',
regionId: 'us',
transId: 'serviceFee',
revenue: 500,
details: {
serviceId: 'serv_a'
}
},
]
查看我们可以说的文件:
- 有两个区域,根据
regionId:[eg,us], - 根据
serviceId,共有三种服务:[serv_a, serv_b, serv_c], - 每个文档都显示了特定地区特定服务的收入。
这就是我想要的:
- 我想知道特定地区(例如)中表现最好的服务(总收入最高)。
- 我也想知道同一地区表现最差的服务。
- 所以预期的结果应该是:
-
'eg'地区表现最佳的服务是:serv_c - 该地区表现最差的服务是:
serv_b
-
所以从我的基本理解来看,我认为我需要找到一种方法来计算该地区每项服务的总收入(例如),然后在总数之间进行比较以决定哪个是最高的,哪个是最低的!我想我应该使用 mongodb aggregate 函数,但我不知道在这种情况下如何使用它。
【问题讨论】:
-
您可以使用聚合阶段
$group,以及$sum、$max和$min等聚合运算符。
标签: mongodb nosql nosql-aggregation