neo4j 查询转换以在函数中使用

neo4j query conversion to use in function

我有这样的查询,它通常接受 {} 括号中的一个参数。

MATCH (pr:Person)-[:person_successor]->(next:Person)
  WHERE (:Queue {name: 'A'}) -[:queue_person]-> (pr)
  RETURN pr.name, next.name

我想作为 Queue name 传递几个可能的参数而不是一个,例如{name: 'A' or name: 'B'}。所以我希望有来自许多队列的人和他们的继任者。队列也相互连接。 但是这样的查询是不可能的并抛出异常:

MATCH (pr:Person)-[:person_successor]->(next:Person)
  WHERE (:Queue {name: 'A' or name: 'B'}) -[:queue_person]-> (pr)
  RETURN pr.name, next.name

不是上面的,而是这样工作的:

MATCH (q:Queue)-[:queue_person]->(pr:Person)-[:person_successor]->(:next:Person)
  WHERE q.name in ['A','B']
  RETURN pr.name, next.name

但我想使用 (pr:Person)-[:person_successor]->(next:Person) 而不是 (q:Queue)-[:queue_person]->(pr:Person)-[:person_successor]->(:next:Person) 因为它以某种方式破坏了人的秩序所以我没有:

A B

B C

C D

D E ...

由于match子句中的queue不知何故受到了干扰。

是否可以在第二行的 where 子句中传递参数并保持队列和人员之间的关系 -[:queue_person]-> (pr) 就像下面的无效代码段查询一样?

WHERE (:Queue {name in ['A','B']) -[:queue_person]-> (pr)

我不清楚顺序与

有何不同
MATCH (q:Queue)-[:queue_person]->(pr:Person)-[:person_successor]->(:next:Person)
WHERE q.name in ['A','B']
RETURN pr.name, next.name

很难从您分享的回复中看出。

另一种写法是

MATCH (q:Queue)
WHERE q.name in ['A','B']
WITH q
MATCH (pr:Person)-[:person_successor]->(next:Person)
WHERE (q)-[:queue_person]->(pr)
RETURN pr.name, next.name

我觉得你问题中这个查询的问题

MATCH (q:Queue)-[:queue_person]->(pr:Person)-[:person_successor]->(:next:Person)
WHERE q.name in ['A','B']
RETURN pr.name, next.name

在此:(:next:Person)。你只需要更改为 (next:Person)

但如果不是,您可以使用 UNWIND :

      UNWIND ["A", "B"] AS name
      MATCH (pr:Person)-[:person_successor]->(next:Person)
      WHERE (:Queue {name: name}) -[:queue_person]-> (pr)
      RETURN pr.name, next.name