2017-06-01 33 views
0

樣品查詢
下面的查詢返回了我的標籤計數說 「資產」爲一個特定的ID(0)具有>>>
GV()。hasId(0).repeat(出())。發射()。hasLabel( '資產')。COUNT()精怪查詢找到一個標籤的計數的所有節點

但我需要找到計數所有節點那出現在具有上述條件的圖中。

我能夠單獨做到這一點,但我的要求是獲得所有標籤說'資產'的節點的計數。

所以我期待一些東西一樣

{  v [0]:2
            {V [1]:1}
                    {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

謝謝Stephen!但有沒有辦法以分層方式得到結果 –

+0

我不確定我是否遵循。也許我被「圖中的所有節點......」弄糊塗了 - 你是指所有頂點0下的節點? –

+0

我想我現在有問題的答案 - 請看我編輯的答案 –

相關問題