如何使用JSONata统计数组中多字段为true的元素数量
JSONata筛选数组元素并统计数量
给定如下JSON数组:
[ { "_id": { "$oid": "yadayadayada" }, "ownership_id": "yadayadayada", "execution_id": "yadayadayada", "execution_date": { "$date": "yadayadayada" }, "event_type": "yadayadayada", "value_stream": "yadayadayada", "app_name": "yadayadayada", "repository": "yadayadayada", "project": "yadayadayada", "last_error_message": "yadayadayada", "s_ack_rate": true, "b_doc": true, "b_plan": true, "b_cover": true, "b_alerts": true, "b_dashboard": true, "b_track": true, "b_logging": true, "b_mark": true, "b_test": true, "b_check": true }, { "_id": { "$oid": "yadayadayada" }, "ownership_id": "yadayadayada", "execution_id": "yadayadayada", "execution_date": { "$date": "yadayadayada" }, "event_type": "yadayadayada", "value_stream": "yadayadayada", "app_name": "yadayadayada", "repository": "yadayadayada", "project": "yadayadayada", "last_error_message": "yadayadayada", "s_ack_rate": false, "b_doc": true, "b_plan": true, "b_cover": true, "b_alerts": true, "b_dashboard": true, "b_track": true, "b_logging": true, "b_mark": true, "b_test": true, "b_check": true } ]
需求:筛选出数组中同时满足b_plan、b_cover、b_dashboard字段值为true的元素,并统计这类元素的数量。
错误写法分析
- 第一种写法
$count(($[b_plan = true] ; $[b_cover = true] ; $[b_dashboard = true])):分号;是将三个筛选结果合并为一个数组,会包含满足任一条件的元素,甚至重复统计,结果不符合预期。 - 第二种写法
$count(($[b_plan = true] and $[b_cover = true] and $[b_dashboard = true])):这里的and是对三个筛选结果做布尔判断,最终返回单个布尔值,$count对布尔值统计只会返回1,无法得到正确数量。
正确的JSONata表达式
$count($[b_plan = true and b_cover = true and b_dashboard = true])
说明
$[...]是JSONata的数组筛选语法,括号内的条件会作用于数组每个元素,只有同时满足所有条件的元素才会被保留到筛选后的数组中。$count()函数统计筛选后数组的元素数量,直接得到符合条件的元素总数。
内容的提问来源于stack exchange,提问作者Reinaldo
相关产品推荐
相关产品推荐

