首页 文章

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

提问于
浏览
2

我正在使用Gremlin查询存储在TitanDB中的图形 .

该图包含具有属性的用户顶点,例如“描述”,以及表示用户之间关系的边 .

我想使用Gremlin来获取1)用户的属性和2)与其他用户的可能关系 . 例如,我可以使用以下查询来获取描述中包含“开发人员”一词的所有用户以及源自或定位这些用户的标签“关系”的边缘:

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

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

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

1 回答

  • 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:[]]
    

相关问题