知识共享 --> 下面的查询从A(节点)开始遍历<--W(edge)<--B(node)-->X(边)--> C(节点)-->Y(边)--> D(节点)<--Z(edge)<--E(node)
g.V().hasLabel("A").as("A").
inE("W").as("W").
outV().
hasLabel("B").as("B").
outE("X").as("X").
inV().
hasLabel("C").as("C").
outE("Y").
has("Y propery","10000").as("Y").
inV().
hasLabel("D").as("D").
inE("Z").as("Z").
outV().
hasLabel("E").as("E").
select("A","W","B","X","C","Y","Y","D","Z","E")
.by(valueMap()).toList()
这个查询有一些事情......
首先,标签应用作图中节点和边的较低基数组。如果您从关系数据库的角度来看,请将标签视为表名称(即客户、产品、电影、演员等)。如果您的计划是查找单个节点或边,则应该为每个节点和边使用唯一的 ID 值。
其次,我们尝试要求请求 Gremlin 查询帮助的用户提供一个示例图,以便将来偶然发现这个问题的人可以将一些东西导入到他们自己的 Gremlin 服务器、Gremlify 或其他方式来验证问题的结果。对于这个特定问题,您可以使用以下内容:
g.addV('nodeLabel').property(id,'A').as('A').
addV('nodeLabel').property(id,'B').as('B').
addV('nodeLabel').property(id,'C').as('C').
addV('nodeLabel').property(id,'D').as('D').
addV('nodeLabel').property(id,'E').as('E').
addE('edgeLabel').property(id,'W').from('A').to('B').
addE('edgeLabel').property(id,'X').from('B').to('C').
addE('edgeLabel').property(id,'Y').from('C').to('D').
addE('edgeLabel').property(id,'Z').from('D').to('E')
现在有了这张图,如果我们想返回从 A 到 E 的完整路径,我们可以这样做:
g.V('A').outE('W').inV().hasId('B').
outE('X').inV().hasId('C').
outE('Y').inV().hasId('D').
outE('Z').inV().hasId('E').
path().by(elemmentMap())
这将返回查询遍历的整个路径以及所有节点和交叉边的 elementMap()。
如果你只想从节点“A”遍历到最后一个叶节点,你可以这样做:
g.V('A').repeat(outE().inV().simplePath()).path().by(elementMap())
如果您在 Gremlin 控制台中运行这些查询,则不需要以
toList()
或 next()
结尾。但是,如果在代码中使用任何 Gremlin 客户端,您将需要使用这些客户端,因为它们是将查询发送到连接的支持 TinkerPop 的服务器所需的终端步骤。
用于学习 Gremlin 的好资源在这里:https://www.kelvinlawrence.net/book/PracticalGremlin.html