如何将指定Gremlin遍历语句转换为Cypher并返回Entity2相邻入顶点
Gremlin遍历语句转Cypher实现
对应你给出的Gremlin逻辑和过滤条件,转换后的Cypher语句如下:
MATCH (e1:Entity1) WHERE e1.id IN $id1 MATCH (e2)-[:Entity2]->(e1) WHERE EXISTS { MATCH (e2)-[:Entity3]->(e3)-[:Entity4]->(e4) WHERE e4.name IN $nameList } RETURN e2
逻辑说明
- 语句中
$id1对应原Gremlin里的id1取值列表参数,$nameList对应原Gremlin里的name取值列表参数,可根据你使用的图数据库客户端规则调整参数命名 - 该写法逻辑和原Gremlin完全对齐:先筛选id在指定范围内的Entity1节点,再找到通过Entity2边指向Entity1的目标节点(也就是你需要的Entity2相邻入顶点),最后过滤目标节点满足「存在Entity3出边指向的节点,且该节点存在Entity4出边指向name在指定列表内的节点」的条件,不需要额外去重。
如果使用的Neo4j版本不支持EXISTS子查询,也可以用如下简化写法,需要加DISTINCT避免目标节点匹配到多条符合条件的路径时重复返回:
MATCH (e2)-[:Entity2]->(e1:Entity1), (e2)-[:Entity3]->()-[:Entity4]->(e4) WHERE e1.id IN $id1 AND e4.name IN $nameList RETURN DISTINCT e2
内容的提问来源于stack exchange,提问作者HashDhi
相关产品推荐
相关产品推荐

