如何找到Neo4j中路径中的重复节点标签?

时间:2017-07-21 08:57:08

标签: neo4j cypher

我的路径包含多个标签,例如Shipped,Received,Ready to shipping节点标签。我想知道某个路径是否多次出现节点标签。它们可能不合适。

(Shipped)-[:NEXT]->()-[:NEXT]->()-[:NEXT]-(:ReadyToShip)-[:NEXT]-()-[:NEXT]-(:ReadyToShip)-[:NEXT]-(:Received)

我有很多路径,但我想找到所有具有2次或更多次ReadyToShip节点标签的路径,如上所述。我怎样才能做到这一点?我可以使用以下方法提取两种节点之间的所有可能路径:

match path=(s:Shipped)-[:NEXT*]->(m:Received) return distinct extract(p in nodes(path) | labels(p))

但是我必须把它解压出来并自己过滤掉。我怎样才能在Cypher中做到这一点?

1 个答案:

答案 0 :(得分:1)

[增订]

此查询应返回至少 2 ReadyToShip个节点的每个路径,以及该路径中ReadyToShip个节点的数量:

MATCH p=(s:Shipped)-[:NEXT*]->(:ReadyToShip)-[:NEXT*]->(:ReadyToShip)-[:NEXT*]->(m:Received)
RETURN
  p,
  REDUCE(s = 0, n IN NODES(p) | CASE WHEN 'ReadyToShip' IN LABELS(n) THEN s + 1 ELSE s END) AS num;