获取顶点和与其相连的顶点的详细信息
Getting the vertex and the details of the vertex connected to it
我有如下场景,需要获取 'Application' 标签顶点属性以及与其相连的 'work' 顶点的 ID 或 属性
我已经编写了 gremlin glv 查询来获取路径和应用程序属性,但很难获取与其连接的顶点的属性(使用 pyton)
查询是,
g.V().hasLabel('Company').outE().inV().hasLabel('Person').outE().inV().hasLabel('Work').outE().inV().hasLabel('Applications').path().unfold().dedup().filter('Applications').elementMap().toList()
这个 return 我的应用程序顶点值像
[{
id:'12159',label:'Applications', 'applicationname':'application1'
},
{
id:'12157',label:'Applications', 'applicationname':'application2'
},
{
id:'12155',label:'Applications', 'applicationname':'application3'
}
]
但我们还需要获取 'work' 顶点详细信息以及应用程序详细信息(应用程序可以连接到多个工作),例如,
{
id:'12159',label:'Applications', 'applicationname':'application1', 'workcode':['workcode1', 'workcode2']
},
{
id:'12157',label:'Applications', 'applicationname':'application2', 'workcode':['workcode2']
}.
{
id:'12157',label:'Applications', 'applicationname':'application3', 'workcode':['workcode2']
}
是否可以在gremlin本身获取这些信息,或者我们是否需要在获取路径后使用python,
要添加的查询是,
g.addV('Company').as('1').
addV('Company').as('2').
addV('Person').as('3').
addV('Work').as('4').
property(single, 'workcode', 'workcode2').
addV('Work').as('5').
property(single, 'workcode', 'workcode1').
addV('Application').as('6').
property(single, 'applicationname', 'application3').
addV('Application').as('7').
property(single, 'applicationname', 'application2').
addV('Application').as('8').
property(single, 'applicationname', 'application1').
addE('Contractor').from('2').to('3').
addE('Contractor').from('1').to('3').
addE('work').from('3').to('5').addE('work').
from('3').to('4').addE('workingon').from('4').
to('7').addE('workingon').from('4').to('6').
addE('workingon').from('5').to('8').
addE('workingon').from('4').to('8')
谢谢
我认为您不应该使用 path
步骤,因为您只使用了最后一个顶点。
如果要将元素贴图与来自另一个顶点的 属性 合并,可以使用 project
:
g.V().hasLabel('Company').outE().inV().
hasLabel('Person').outE().inV().
hasLabel('Work').outE().inV().
hasLabel('Application').dedup().local(union(
elementMap().unfold(),
project('workcose').
by(in().hasLabel('Work').
values('workcode').fold())
).
fold())
我有如下场景,需要获取 'Application' 标签顶点属性以及与其相连的 'work' 顶点的 ID 或 属性
我已经编写了 gremlin glv 查询来获取路径和应用程序属性,但很难获取与其连接的顶点的属性(使用 pyton)
查询是,
g.V().hasLabel('Company').outE().inV().hasLabel('Person').outE().inV().hasLabel('Work').outE().inV().hasLabel('Applications').path().unfold().dedup().filter('Applications').elementMap().toList()
这个 return 我的应用程序顶点值像
[{
id:'12159',label:'Applications', 'applicationname':'application1'
},
{
id:'12157',label:'Applications', 'applicationname':'application2'
},
{
id:'12155',label:'Applications', 'applicationname':'application3'
}
]
但我们还需要获取 'work' 顶点详细信息以及应用程序详细信息(应用程序可以连接到多个工作),例如,
{
id:'12159',label:'Applications', 'applicationname':'application1', 'workcode':['workcode1', 'workcode2']
},
{
id:'12157',label:'Applications', 'applicationname':'application2', 'workcode':['workcode2']
}.
{
id:'12157',label:'Applications', 'applicationname':'application3', 'workcode':['workcode2']
}
是否可以在gremlin本身获取这些信息,或者我们是否需要在获取路径后使用python,
要添加的查询是,
g.addV('Company').as('1').
addV('Company').as('2').
addV('Person').as('3').
addV('Work').as('4').
property(single, 'workcode', 'workcode2').
addV('Work').as('5').
property(single, 'workcode', 'workcode1').
addV('Application').as('6').
property(single, 'applicationname', 'application3').
addV('Application').as('7').
property(single, 'applicationname', 'application2').
addV('Application').as('8').
property(single, 'applicationname', 'application1').
addE('Contractor').from('2').to('3').
addE('Contractor').from('1').to('3').
addE('work').from('3').to('5').addE('work').
from('3').to('4').addE('workingon').from('4').
to('7').addE('workingon').from('4').to('6').
addE('workingon').from('5').to('8').
addE('workingon').from('4').to('8')
谢谢
我认为您不应该使用 path
步骤,因为您只使用了最后一个顶点。
如果要将元素贴图与来自另一个顶点的 属性 合并,可以使用 project
:
g.V().hasLabel('Company').outE().inV().
hasLabel('Person').outE().inV().
hasLabel('Work').outE().inV().
hasLabel('Application').dedup().local(union(
elementMap().unfold(),
project('workcose').
by(in().hasLabel('Work').
values('workcode').fold())
).
fold())