Gremlin中判断节点是否为叶子节点

问题描述 投票:0回答:1

我正在寻找一种方法来找出来自

root node
的所有节点是
leaf node
intermediate node

我添加了示例图。

g.addV('company').property(id,'TESTNX01').property('name','Alphabet').next()
g.addV('company').property(id,'TESTNX02').property('name','Google').next()
g.addV('company').property(id,'TESTNX03').property('name','Youtube').next()
g.addV('company').property(id,'TESTNX05').property('name','YoutubeKids').next()
g.addV('person').property(id,'TESTNX01_1900-01-01_1_1').property('bu_id', 'TESTNX01_1900-01-01_1_1').property('name', 'W Karl David Laxton').next()
g.addV('person').property(id,'TESTNX02_1900-01-01_1_1').property('bu_id', 'TESTNX02_1900-01-01_1_1').property('name', 'Steven H Strong').next()
g.addV('person').property(id,'TESTNX02_1900-01-01_1_2').property('bu_id', 'TESTNX02_1900-01-01_1_2').property('name', 'Adrian Matthew Paul Rowe').next()
g.addV('person').property(id,'TESTNX02_1900-01-01_1_3').property('bu_id', 'TESTNX02_1900-01-01_1_3').property('name', 'Steven Henry Strong').next()
g.addV('person').property(id,'TESTNX02_1900-01-01_1_4').property('bu_id', 'TESTNX02_1900-01-01_1_4').property('name', 'Dom Robinson').next()
g.addV('person').property(id,'TESTNX03_1900-01-01_1_3').property('bu_id', 'TESTNX03_1900-01-01_1_3').property('name', 'Dominic Nesbitt Robinson').next()
g.addV('person').property(id,'TESTNX03_1900-01-01_1_4').property('bu_id', 'TESTNX03_1900-01-01_1_4').property('name', 'Adrian Matthew Paul Rowe').next()
g.addV('person').property(id,'TESTNX03_1900-01-01_1_5').property('bu_id', 'TESTNX03_1900-01-01_1_5').property('name', 'William Laxton').next()
g.addV('person').property(id,'TESTNX03_1900-01-01_1_6').property('bu_id', 'TESTNX03_1900-01-01_1_6').property('name', 'Will Laxton').next()


g.addE('HAS_SHRHLDING_PC_TO').from(__.V('TESTNX01')).to(__.V('TESTNX01_1900-01-01_1_1')).property(id,'TESTNX01_HAS_SHRHLDING_PC_TO_TESTNX01_1900-01-01_1_1').property('perc_value', 25).next()
g.addE('HAS_VOTING_PC_TO').from(__.V('TESTNX01')).to(__.V('TESTNX01_1900-01-01_1_1')).property(id,'TESTNX01_HAS_VOTING_PC_TO_TESTNX01_1900-01-01_1_1').property('perc_value', 50).next()
g.addE('HAS_SHRHLDING_PC_TO').from(__.V('TESTNX01')).to(__.V('TESTNX02')).property(id,'TESTNX01_HAS_SHRHLDING_PC_TO_TESTNX02').property('perc_value', 75).next()
g.addE('HAS_VOTING_PC_TO').from(__.V('TESTNX01')).to(__.V('TESTNX02')).property(id,'TESTNX01_HAS_VOTING_PC_TO_TESTNX02').property('perc_value', 50).next()
g.addE('HAS_SHRHLDING_PC_TO').from(__.V('TESTNX02')).to(__.V('TESTNX02_1900-01-01_1_1')).property(id,'TESTNX02_HAS_SHRHLDING_PC_TO_TESTNX02_1900-01-01_1_1').property('perc_value', 25).next()
g.addE('HAS_VOTING_PC_TO').from(__.V('TESTNX02')).to(__.V('TESTNX02_1900-01-01_1_1')).property(id,'TESTNX02_HAS_VOTING_PC_TO_TESTNX02_1900-01-01_1_1').property('perc_value', 25).next()
g.addE('HAS_SHRHLDING_PC_TO').from(__.V('TESTNX02')).to(__.V('TESTNX02_1900-01-01_1_2')).property(id,'TESTNX02_HAS_SHRHLDING_PC_TO_TESTNX02_1900-01-01_1_2').property('perc_value', 25).next()
g.addE('HAS_VOTING_PC_TO').from(__.V('TESTNX02')).to(__.V('TESTNX02_1900-01-01_1_2')).property(id,'TESTNX02_HAS_VOTING_PC_TO_TESTNX02_1900-01-01_1_2').property('perc_value', 25).next()
g.addE('HAS_SHRHLDING_PC_TO').from(__.V('TESTNX02')).to(__.V('TESTNX02_1900-01-01_1_3')).property(id,'TESTNX02_HAS_SHRHLDING_PC_TO_TESTNX02_1900-01-01_1_3').property('perc_value', 10).next()
g.addE('HAS_VOTING_PC_TO').from(__.V('TESTNX02')).to(__.V('TESTNX02_1900-01-01_1_3')).property(id,'TESTNX02_HAS_VOTING_PC_TO_TESTNX02_1900-01-01_1_3').property('perc_value', 5).next()
g.addE('HAS_SHRHLDING_PC_TO').from(__.V('TESTNX02')).to(__.V('TESTNX02_1900-01-01_1_4')).property(id,'TESTNX02_HAS_SHRHLDING_PC_TO_TESTNX02_1900-01-01_1_4').property('perc_value', 10).next()
g.addE('HAS_VOTING_PC_TO').from(__.V('TESTNX02')).to(__.V('TESTNX02_1900-01-01_1_4')).property(id,'TESTNX02_HAS_VOTING_PC_TO_TESTNX02_1900-01-01_1_4').property('perc_value', 5).next()
g.addE('HAS_SHRHLDING_PC_TO').from(__.V('TESTNX02')).to(__.V('TESTNX03')).property(id,'TESTNX02_HAS_SHRHLDING_PC_TO_TESTNX03').property('perc_value', 30).next()
g.addE('HAS_VOTING_PC_TO').from(__.V('TESTNX02')).to(__.V('TESTNX03')).property(id,'TESTNX02_HAS_VOTING_PC_TO_TESTNX03').property('perc_value', 50).next()
g.addE('HAS_SHRHLDING_PC_TO').from(__.V('TESTNX03')).to(__.V('TESTNX03_1900-01-01_1_3')).property(id,'TESTNX03_HAS_SHRHLDING_PC_TO_TESTNX03_1900-01-01_1_3').property('perc_value', 20).next()
g.addE('HAS_VOTING_PC_TO').from(__.V('TESTNX03')).to(__.V('TESTNX03_1900-01-01_1_3')).property(id,'TESTNX03_HAS_VOTING_PC_TO_TESTNX03_1900-01-01_1_3').property('perc_value', 15).next()
g.addE('HAS_SHRHLDING_PC_TO').from(__.V('TESTNX03')).to(__.V('TESTNX03_1900-01-01_1_4')).property(id,'TESTNX03_HAS_SHRHLDING_PC_TO_TESTNX03_1900-01-01_1_4').property('perc_value', 20).next()
g.addE('HAS_VOTING_PC_TO').from(__.V('TESTNX03')).to(__.V('TESTNX03_1900-01-01_1_4')).property(id,'TESTNX03_HAS_VOTING_PC_TO_TESTNX03_1900-01-01_1_4').property('perc_value', 25).next()
g.addE('HAS_SHRHLDING_PC_TO').from(__.V('TESTNX03')).to(__.V('TESTNX03_1900-01-01_1_5')).property(id,'TESTNX03_HAS_SHRHLDING_PC_TO_TESTNX03_1900-01-01_1_5').property('perc_value', 10).next()
g.addE('HAS_VOTING_PC_TO').from(__.V('TESTNX03')).to(__.V('TESTNX03_1900-01-01_1_5')).property(id,'TESTNX03_HAS_VOTING_PC_TO_TESTNX03_1900-01-01_1_5').property('perc_value', 5).next()
g.addE('HAS_SHRHLDING_PC_TO').from(__.V('TESTNX03')).to(__.V('TESTNX03_1900-01-01_1_6')).property(id,'TESTNX03_HAS_SHRHLDING_PC_TO_TESTNX03_1900-01-01_1_6').property('perc_value', 20).next()
g.addE('HAS_VOTING_PC_TO').from(__.V('TESTNX03')).to(__.V('TESTNX03_1900-01-01_1_6')).property(id,'TESTNX03_HAS_VOTING_PC_TO_TESTNX03_1900-01-01_1_6').property('perc_value', 10).next()
g.addE('HAS_SHRHLDING_PC_TO').from(__.V('TESTNX03')).to(__.V('TESTNX05')).property(id,'TESTNX03_HAS_SHRHLDING_PC_TO_TESTNX05').property('perc_value', 20).next()
g.addE('HAS_VOTING_PC_TO').from(__.V('TESTNX03')).to(__.V('TESTNX05')).property(id,'TESTNX03_HAS_VOTING_PC_TO_TESTNX05').property('perc_value', 20).next()

我正在尝试获取

nodes
中所有可能的
root node
,看看它们是否为
leaf
。 “叶子”
nodes
被分配值
Y
,而中间
nodes
则获得
N

输出示例:

{'root_company' : 'TESTNX01', 'Shareholder': 'TESTNX03', 'leaf': 'N'}
{'root_company' : 'TESTNX01', 'Shareholder': 'TESTNX02_1900-01-01_1_1', 'leaf': 'Y'}
.
.
.
{'root_company' : 'TESTNX01', 'Shareholder': 'TESTNX05', 'leaf': 'Y'}

任何线索将不胜感激。谢谢你。

gremlin amazon-neptune tinkerpop3
1个回答
0
投票

您只需要测试每个顶点上的边并返回“Y”或“N”。最简单的是,这可以通过

choose()
:

来完成
gremlin> g.V('TESTNX01').out().choose(outE(),constant('N'),constant('Y'))
==>N
==>Y
==>Y
==>N

更具体地说,对于遍历整个树的请求,您可能会执行以下操作:

gremlin> g.V('TESTNX01').repeat(out()).emit().dedup().project('v','leaf').by(valueMap()).by(choose(outE(),constant('N'),constant('Y')))
==>[v:[name:[Google]],leaf:N]
==>[v:[name:[W Karl David Laxton],bu_id:[TESTNX01_1900-01-01_1_1]],leaf:Y]
==>[v:[name:[Dom Robinson],bu_id:[TESTNX02_1900-01-01_1_4]],leaf:Y]
==>[v:[name:[Steven Henry Strong],bu_id:[TESTNX02_1900-01-01_1_3]],leaf:Y]
==>[v:[name:[Adrian Matthew Paul Rowe],bu_id:[TESTNX02_1900-01-01_1_2]],leaf:Y]
==>[v:[name:[Steven H Strong],bu_id:[TESTNX02_1900-01-01_1_1]],leaf:Y]
==>[v:[name:[Youtube]],leaf:N]
==>[v:[name:[Adrian Matthew Paul Rowe],bu_id:[TESTNX03_1900-01-01_1_4]],leaf:Y]
==>[v:[name:[William Laxton],bu_id:[TESTNX03_1900-01-01_1_5]],leaf:Y]
==>[v:[name:[Dominic Nesbitt Robinson],bu_id:[TESTNX03_1900-01-01_1_3]],leaf:Y]
==>[v:[name:[YoutubeKids]],leaf:Y]
==>[v:[name:[Will Laxton],bu_id:[TESTNX03_1900-01-01_1_6]],leaf:Y]
© www.soinside.com 2019 - 2024. All rights reserved.