Vous pouvez simplement groupe par contributor_name
et utiliser la variante de la syntaxe COLLECT spéciale WITH COUNT INTO ...
pour calculer efficace la fréquence de chaque valeur dans l'ensemble de données:
FOR doc IN coll
COLLECT name = doc.contributor_name WITH COUNT INTO count
RETURN { name, count }
Le résultat peut ressembler à ceci:
[
{ "name": "Rizano", "count": 5 },
{ "name": "Felipe", "count": 8 },
...
]
Vous pouvez fusionner le résultat comme ceci si vous préférez ce format:
[
{
"Rizano": 5,
"Felipe": 8
}
...
]
Requête:
RETURN MERGE(
FOR doc IN coll
COLLECT name = doc.contributor_name WITH COUNT INTO count
RETURN { [name]: count }
)
Vous pouvez compter également trier par et limiter le résultat aux valeurs les plus présentes, par exemple comme celui-ci (seul contributeur haut):
FOR doc IN coll
COLLECT name = doc.contributor_name WITH COUNT INTO count
SORT count DESC
LIMIT 1
RETURN { name, count }
Il y a aussi COLLECT AGGREGATE, bien qu'il n'y ait pas de différence de performance pour cette requête particulière:
FOR doc IN coll
COLLECT name = doc.contributor_name AGGREGATE count = LENGTH(1)
SORT count DESC
LIMIT 1
RETURN { name, count }
La valeur passée à LENGTH
ne compte pas vraiment, tout ce que nous voulons, c'est qu'il renvoie une longueur de 1 (augmentant ainsi le compteur de 1 pour le contributeur donné).