php - 如何返回包含最大值的列
问题描述
我有一个我试图纠正的聚合。我将数据分组在一起,并希望返回具有最高PID
. 我可以使用 max,它返回最高的 PID,但不返回相应的VALUE
.
这些是我管道中的阶段。
[
'$project'=> [
"RS_VERSION" => 1,
"TRADE_DATE" => 1,
"JURISDICTION" => 1,
"DELIVERY_DATE" => 1,
"DELIVERY_HOUR" => ['$convert'=> [ 'input'=> '$DELIVERY_HOUR', 'to'=> 'int']],
"DELIVERY_INTERVAL" => ['$convert'=> [ 'input'=> '$DELIVERY_INTERVAL', 'to'=> 'int']],
"DELIVERY_TIME" => 1,
"VALUE" => 1,
"DELIVERY_ORDER" => 1,
"PID" => ['$convert'=> [ 'input'=> '$PID', 'to'=> 'int']],
"KEY"=> [
'$concat'=> [
'_', '$RS_VERSION', '_', '$TRADE_DATE', '_', '$JURISDICTION', '_', '$DELIVERY_DATE', '_', '$DELIVERY_HOUR', '_', '$DELIVERY_INTERVAL' ,'_', '$DELIVERY_TIME', '_', '$DELIVERY_ORDER'
]
],
]
],
[
'$group'=> [
'_id'=> '$KEY',
'RS_VERSION'=>['$first'=> '$RS_VERSION'],
'TRADE_DATE'=>['$first'=> '$TRADE_DATE'],
'JURISDICTION'=>['$first'=> '$JURISDICTION'],
'DELIVERY_DATE'=>['$first'=> '$DELIVERY_DATE'],
'DELIVERY_HOUR' =>['$first'=> '$DELIVERY_HOUR'],
'DELIVERY_INTERVAL' =>['$first'=> '$DELIVERY_INTERVAL'],
'DELIVERY_TIME'=>['$first'=> '$DELIVERY_TIME'],
'DELIVERY_ORDER'=>['$first'=> '$DELIVERY_ORDER'],
'pid' => ['$first'=> '$PID'],
'VALUE' => ['$first' => '$VALUE']
]
],
我需要根据分组从最高 pid 返回相应的文档值。目前我并不总是得到相应的价值。
解决方案
看起来 $group 只是为每个不同的值获取第一个文档$KEY
,如果这是意图,在分组之前按 pid 排序,那么您可以为每个键获取第一个文档。
{$sort: { PID: -1 }},
然后小组阶段将选择与每个键对应的第一个值,并且由于文档按 pid 降序排列,因此这些字段都将对应于该键的最高 pid。
推荐阅读
- multithreading - 如何将我的计算机设置为 Julia 多线程?
- python - Freeswitch 从拨号计划运行 python 脚本
- python - 如何将 sigmoid 设置在 0 和 1 之间?
- mysql - 派生属性如何识别
- javascript - ReactJS:过滤每个objectof数组
- vuejs2 - Vue-authenticate:为什么我在使用浏览器隐身模式且没有令牌时能够从 API 中获取敏感数据?
- typescript - 具有多条记录的单个 yml 文件
- android - 如何处理android MVI架构中的多个API调用(单向数据流)?
- asp.net-mvc - 如何在循环中设置 asp-items 和 asp-for
- regex - 删除带有特殊符号 @ 的双行空格