JSONiq является декларативным языком, что означает, что он может группировать и считать автоматически, в отличие от императивных языков, в которых нужно вручную увеличивать счетчик:
let $tweets := (
{ "screen_name": "ifp_tuebingen" },
{ "screen_name": "ifp_tuebingen" },
{ "screen_name": "ifp_reutlingen" }
)
return
for $t in $tweets
group by $screen-name := $t.screen_name
let $count := count($t)
return { $count : $screen-name }
В целом, было бы более распространенной практикой иметьподсчет в качестве значения и отображаемое имя в качестве ключа в результатах, т. е. swap $count
и $u.screen_name
:
...
return { $screen-name : $count }
JSONiq может затем собрать эти результаты в один объект, так какимена экранов после группировки будут уникальными клавишами:
...
return
{|
for $t in $tweets
group by $screen-name := $t.screen_name
let $count := count($t)
return { $screen-name : $count }
|}
Обратите внимание, что в этом случае данные $users
не нужны. Это понадобится только в том случае, если у пользователей есть дополнительные метаданные, и в этом случае можно выполнить объединение.