簡體   English   中英

為每個組創建一個組頂點,並創建到組頂點的出邊

[英]Create a group vertex for each group, and create outgoing edges to the group vertices

我有一個 gremlin 查詢,它根據兩個屬性對頂點進行分組

g.V().hasLabel("PERSON").
  group().
    by(values('favorite_brand', 'favorite_color').fold()).
  next()

它返回映射到組中頂點列表的每個組的列表

1   {('adidas', 'blue'): [v[123], v[456]]}
2   {('nike', 'red'): [v[789]]}

我如何:對於每個組,創建一個頂點,該頂點的出邊到該組中的所有頂點,並將新的組頂點屬性設置為相同

例如,對於上面的例子,我會創建兩個新的頂點。 Group Vertex 1 的 'favorite_brand' 為 adidas,'favorite_color' 為藍色,並且有兩個出邊到兩個頂點 123 和 456。

組頂點 2 相同

gremlin 中有沒有一種方法可以執行此查詢,或者我是否必須將返回的 hashmap 存儲在變量中,並在我的 lambda 中進行循環以創建新頂點? 我熟悉 addV 步驟,但如何遍歷 hashmap 中的每個元素然后訪問列表值? 謝謝!

我查看了 tinkerpop 官方文檔以了解組步驟,但沒有找到有關如何遍歷結果和執行操作的足夠信息

沒有您的數據,下面的答案是使用航線數據集構建的。 可以使用以下方法構建初始組:

g.V().hasId('3','8','12','13','14').
  group().
    by(values('region', 'country').fold()).
  unfold()

哪個產量

1   {('US-CA', 'US'): [v[13]]}
2   {('US-NY', 'US'): [v[12], v[14]]}
3   {('US-TX', 'US'): [v[3], v[8]]}

從那里我們可以構建一個查詢來展開組,同時創建新的節點和邊。

g.V().hasId('3','8','12','13','14').
  group().
    by(values('region', 'country').fold()).
  unfold().as('grp').
  addV('group').as('new-node').
    property('region',select(keys).limit(local,1)).
    property('country',select(keys).tail(local)).
  sideEffect(select('grp').select(values).unfold().addE('new-edge').from('new-node'))

它向我們展示了創建的節點,但也會在sideEffect內創建邊。

1   v[26c2d653-5e9c-3ec9-0854-6ed2a212c63b]
2   v[80c2d653-5e9c-b838-063c-82f6d21cd6e5]
3   v[42c2d653-5e9d-31c7-2c02-c7bf72fe8e38]

我們可以使用下面的查詢來驗證一切是否正常。

g.V().hasLabel('group').out().path().by(valueMap()).by(id())

哪個返回

1   path[{'region': ['US-CA'], 'country': ['US']}, 13]
2   path[{'region': ['US-NY'], 'country': ['US']}, 12]
3   path[{'region': ['US-NY'], 'country': ['US']}, 14]
4   path[{'region': ['US-TX'], 'country': ['US']}, 3]
5   path[{'region': ['US-TX'], 'country': ['US']}, 8]

我使用 Amazon Neptune 構建了這個答案,但它應該適用於其他兼容 TinkerPop 的商店。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM