jq select 从数组中记录字段的最小值或最大值

jq select record from array with min or max value of field

我有一个 json 记录如下:

[
 {"number":1},
 {"number":3}
]

并希望select(过滤)具有字段“number”的最大值或最小值的记录。

我可以像这样得到“数字”的最小值或最大值:

$ echo '[{"number":1},{"number":3}]' | jq ' [ .[].number ] | min'

(发出 1)

我可以输出布尔值:

$ echo '[{"number":1},{"number":3}]' | jq '.[].number==([ .[].number ] | min)'
true
false

但是当我尝试将它与 select 放在一起时,它失败了:

$ echo '[{"number":1},{"number":3}]' | jq 'map(select(.[].number==([ .[].number ] | min)))'
jq: error (at <stdin>:1): Cannot index number with string "number"

我觉得我很接近,但卡住了。我做错了什么?

提前致谢!

([ .[].number ] | min) as $m| map(select(.number== $m))

https://jqplay.org/s/bUwtNrfAE-

第一

要检索第一个最小项:

([ .[].number ] | min) as $m| first(.[]|select(.number== $m))

min_by、minimal_by、等等

jq 有 built-ins max_bymin_by,记录在 https://stedolan.github.io/jq/manual/#Builtinoperatorsandfunctions

有关 maximal_by 的定义,请参阅位于 https://github.com/stedolan/jq/wiki/Cookbook#find-the-maximal-elements-of-an-array-or-stream 的 jq cookbook。该部分也有 stream-oriented 定义。