小叮当,"Multiple" 查询

Tinkerpop, "Multiple" Query

我正在使用这个查询

g.E().as('ID').select('ID').properties().as('PROP').select('PROP','ID')

它搜索所有具有属性的边,但忽略所有没有 属性 的边。

我想知道如何改进此查询以搜索具有和不具有属性的每个边并提供边的所有数据(例如 ID、SourceVertic、TargetVertic、标签和属性)。

一般来说,如果你有很多边,查看图中的所有边可能会很昂贵。在大图上执行此操作通常不是一个好主意。我在下面的示例中使用了限制步骤,这是一种只查看某些边缘的方法。但是,也就是说,您可以使用 valueMap 查看边上的所有属性。例如(从我有一个跟踪足球比赛的图表):

gremlin> g.E().valueMap().with(WithOptions.tokens).limit(5)
==>[id:400,label:played,date:12 Apr 2014,result:1-0]
==>[id:401,label:played,date:12 Apr 2014,result:1-0]
==>[id:402,label:played,date:12 Apr 2014,result:0-1]
==>[id:403,label:played,date:12 Apr 2014,result:1-0]
==>[id:404,label:played,date:12 Apr 2014,result:0-1] 

编辑添加:

如果您想在结果中包含相邻的顶点,并且您使用的图形数据库支持 3.4.4 或更高级别的 Apache TinkerPop,您可以使用 elementMap 步骤。示例如下所示。

gremlin> g.E().limit(5).elementMap()
==>[id:34,label:member,IN:[id:1,label:EPL],OUT:[id:2,label:Team],years:22]
==>[id:35,label:member,IN:[id:1,label:EPL],OUT:[id:3,label:Team],years:22]
==>[id:36,label:member,IN:[id:1,label:EPL],OUT:[id:4,label:Team],years:22]
==>[id:37,label:member,IN:[id:1,label:EPL],OUT:[id:5,label:Team],years:22]
==>[id:38,label:member,IN:[id:1,label:EPL],OUT:[id:6,label:Team],years:22] 

如果您使用的数据库不支持 elementMap,您需要执行以下操作:

gremlin> g.E().limit(5).
......1>       project('EDGE','IN','OUT').
......2>         by(valueMap().with(WithOptions.tokens)).
......3>         by(inV().union(id(),label()).fold()).
......4>         by(outV().union(id(),label()).fold())   
==>[EDGE:[id:34,label:member,years:22],IN:[1,EPL],OUT:[2,Team]]
==>[EDGE:[id:35,label:member,years:22],IN:[1,EPL],OUT:[3,Team]]
==>[EDGE:[id:36,label:member,years:22],IN:[1,EPL],OUT:[4,Team]]
==>[EDGE:[id:37,label:member,years:22],IN:[1,EPL],OUT:[5,Team]]
==>[EDGE:[id:38,label:member,years:22],IN:[1,EPL],OUT:[6,Team]]