2017-07-09 1 views
2

J'ai une collection ArangoDB où chaque document contient certains attributs commeComment trouver le nombre de valeurs d'attribut le plus courant dans les documents d'une collection ArangoDB?

{ 
    "contributor_name": "Rizano", 
    "action": "create", 
    "id": 3633, 
    "type": "newusers", 
    "logtitle": "What to do", 
    "timestamp": "2006-07-05", 
    "contributor_id": 7878 
} 

La collection contient des millions de documents. Maintenant, je veux savoir quel contributor_name se produit le plus dans les documents et leur nombre.

Répondre

1

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é).