2017-06-01 5 views
0

サンプルクエリ
次のクエリは、特定のIDの 「資産」と言ってくれたラベルの数を返します(0)>>>
ありGV()。hasId(0).REPEAT(アウト())。)(発する。hasLabel( '・アセット・')。(カウント)グレムリンクエリは、すべてのノードのラベルの数を見つけるために

しかし、私はそれすべてのノードのカウントを見つける必要があります上記のような条件でグラフに存在する。

私はそれを個別に行うことができますが、私の要件は、そのラベルに '資産'と呼ばれるすべてのノードの数を取得することです。 2
            {V [1]:1}
                 

だから私は[0]

{  Vのようないくつかのことを期待しています  {v [2]:1}
}
ここで、v [1]とv [2]のラベルの下にノード「Asset」があり、全体のカウントv [0] = 2となります。

答えて

1

できることはいくつかあります。それは多分少し奇妙だが、あなたはgroup()

g.V(). 
    group(). 
    by(). 
    by(repeat(out()).emit().hasLabel('Asset').count()) 

使用することができたり、select()でそれを行うことができ、その後、あなたがメモリに大きなMapを構築していない:あなたは維持したい場合は

g.V().as('v'). 
    map(repeat(out()).emit().hasLabel('Asset').count()).as('count'). 
    select('v','count') 

階層あなたはtree()を使用することができます。

g.V(0). 
    repeat(out()).emit(). 
    tree(). 
    by(project('v','count'). 
     by(). 
     by(repeat(out()).emit().hasLabel('Asset')).select(values)) 

基本的には、頂点0からツリーを取得し、project()を適用しますツリー上の頂点ごとにその構造体を構築します。私はunionを使って別の方法を使っていましたが、考えられるバグを見つけて別の方法を考えなければなりませんでした(実際にGremlin Guru、Daniel Kuppitz、上記のアプローチを思いついた)。私はprojectの使用がより自然で読みやすいので間違いなく良い方法だと思います。もちろん、Kuppitz氏が指摘したように、projectでは不要なMapを作成します(select(values)で取り除くだけです)。 unionの使用はその意味でより良いでしょう。

+0

ありがとうスティーブン!!しかし、階層的な方法で結果を得る方法はありますか? –

+0

私は私が従うかどうかわかりません。多分、私は "グラフの中のすべてのノード"と混乱しています - あなたは頂点0の下のすべてのノードを意味しますか? –

+0

私は今あなたの質問に答えがあると思う - 私の編集された答えを見てください –

関連する問題