如何用Gremlin选择可选的图形结构?

时间:2014-12-30 10:48:00

标签: graph-databases gremlin titan

我正在使用Gremlin查询存储在TitanDB中的图表。

图表包含具有属性的用户顶点,例如" description",以及表示用户之间关系的边。

我想使用Gremlin来获取1)用户的属性和2)与其他用户的可能关系。例如,我可以使用以下查询来获取其描述中包含单词' developer'和带有标签关系的边缘'源自或针对这些用户:

g.V('description',CONTAINS,'developer').as('user').bothE.as('relationship').select

到目前为止,这么好。然而,问题是某些用户(还)没有任何关系。上述查询将忽略这些用户(尽管他们的描述包含'开发人员')并且只返回至少有一个关系的用户。

有没有办法选择描述中包含'开发者'的所有用户,如果存在,还可以选择他们的关系?

1 个答案:

答案 0 :(得分:5)

你可以这样做:

g.V('description',CONTAINS,'developer').as('user').transform{it.bothE.toList()}.as('relationship').select

通过这种方式,您应该为那些没有优势的开发人员提供一个空列表。

在TinkerPop 3.x中,使用TinkerPop现代图表,其中我删除了ID为12的边缘,您可以这样做:

gremlin> g.E(12).drop()
gremlin> g.V().hasLabel('person').as('u').
......1>       map(bothE().fold()).as('r').
......2>       select('u','r')
==>[u:v[1],r:[e[9][1-created->3],e[7][1-knows->2],e[8][1-knows->4]]]
==>[u:v[2],r:[e[7][1-knows->2]]]
==>[u:v[4],r:[e[10][4-created->5],e[11][4-created->3],e[8][1-knows->4]]]
==>[u:v[6],r:[]]