用于 gremlin 遍历的 Cypher 查询

Cypher query for gremlin traversal

密码查询新手

g.V().has('Entity1','id',within(id1)).in('Entity2').
where(__.out('Entity3').where(__.out('Entity4').has('name',within(name))))

如何将上面的 gremlin 转换为 cypher 和 return 相邻的 Entity2 倒数。

这里的条件是 out('Entity3') 应该在 Entity2 之外 out('Entity4') 应该在 Entity3 之外并且在提供的值列表中命名

Return inEntity2

的相邻顶点

我不是 100% 确定你在找什么,因为上面的 Gremlin 与描述相比似乎不完整,但我认为你在找的是这样的:

MATCH (e1:Entity1)<-[:Entity2]-(e2)-[:Entity3]->(e3)-[:Entity4]->(e4 {code: 'LHR'})
WHERE e1 IN (id1)
RETURN e2

直接回答:

MATCH (m:Entity1 )<-[:Entity2]-(n) 
WHERE (n)-[:Entity3]->()-[:Entity4]->({name: "ABC"}) 
       AND m.id in ["id1"]
RETURN n

# Assuming id is a property here. 

# If id is the actual ID of the node

MATCH (m:Entity1 )<-[:Entity2]-(n) 
WHERE (n)-[:Entity3]->()-[:Entity4]->({name: "ABC"}) 
       AND ID(m) in ["id1"]
RETURN n

我尝试使用此查询为您的用例创建图表:

CREATE (a:Entity2)-[:Entity2]->(b:Entity1 {id:"id1"}), 
    (a)-[:Entity3]->(:Entity3)-[:Entity4]->(:Entity4 {name:"ABC"})

图形如下所示:

但是,我认为在编写 gremlin 遍历时,您打算指定顶点的标签而不是边的标签。这就是为什么在我为创建图形而编写的查询中,关系和顶点、关系指向具有相同标签的原因。

如果这是您的意图,那么您的密码查询将如下所示。

MATCH (:Entity1 {id:"id1"})<--(n:Entity2) 
WHERE (n)-->(:Entity3)-->(:Entity4 {name: "ABC"})
RETURN n