我正在使用 Gremlin 查询存储在 TitanDB 中的图形。
该图包含具有属性(例如“描述”)的用户顶点,以及表示用户之间关系的边。
我想使用 Gremlin 来获取 1) 按属性的用户和 2) 与其他用户的可能关系。例如,我可以使用以下查询来获取其描述中包含“开发者”一词的所有用户以及来自或针对这些用户的标签为“关系”的边:
g.V('description',CONTAINS,'developer').as('user').bothE.as('relationship').select
到目前为止,还不错。然而,问题是一些用户(还)没有任何关系。上面的查询将忽略这些用户(尽管他们的描述包含“开发者”)并且只会返回至少有一种关系的用户。
有没有办法选择描述中包含“开发者”的所有用户,如果存在,还可以选择他们的关系?
最佳答案
你可以这样做:
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:[]]
关于graph-databases - 如何使用 Gremlin 选择可选的图结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27704043/