我的路径包含多个标签,例如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中做到这一点?
答案 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;