2017-07-09 4 views
2

は、私は、各文書がArangoDBコレクションのドキュメントで最も多く発生する属性値を見つける方法は?

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

コレクションは、文書の数百万人が含まれているようないくつかの属性が含まれていArangoDBでコレクションを持っています。今私はどの文書がどれくらい出現しているのかを調べたいと思っています。

答えて

1

あなたは単にcontributor_nameによってグループとは、それぞれの値がデータセットで発生頻度を効率的に計算するために、特別なCOLLECT構文バリアントWITH COUNT INTO ...を使用することができます。

FOR doc IN coll 
    COLLECT name = doc.contributor_name WITH COUNT INTO count 
    RETURN { name, count } 

結果は次のようになります。

[ 
    { "name": "Rizano", "count": 5 }, 
    { "name": "Felipe", "count": 8 }, 
    ... 
] 

このような結果をマージすることができます。

[ 
    { 
    "Rizano": 5, 
    "Felipe": 8 
    } 
    ... 
] 

問合せ:

RETURN MERGE(
    FOR doc IN coll 
    COLLECT name = doc.contributor_name WITH COUNT INTO count 
    RETURN { [name]: count } 
) 

また、ソートすることにより、例えば、最も発生値に結果をカウントし、制限する可能性がありますこの(のみトップコントリビューター)のように:この特定のクエリのパフォーマンスに差があってはならないが、

FOR doc IN coll 
    COLLECT name = doc.contributor_name WITH COUNT INTO count 
    SORT count DESC 
    LIMIT 1 
    RETURN { name, count } 

COLLECT AGGREGATEは、もあります:

FOR doc IN coll 
    COLLECT name = doc.contributor_name AGGREGATE count = LENGTH(1) 
    SORT count DESC 
    LIMIT 1 
    RETURN { name, count } 

LENGTHに渡された値が本当に重要ではありません、私たちが望むのは、それが1の長さを返すということです(したがって、与えられたコントリビュータのカウンタを1増加させます)。

関連する問題