如何在Neo4j中找到路径中的重复节点标签?
我有一个包含多个标签的路径,如Shipped、Received、Ready to Shipper节点标签。我想知道某个路径是否多次出现节点标签。它们可能不正常如何在Neo4j中找到路径中的重复节点标签?,neo4j,cypher,Neo4j,Cypher,我有一个包含多个标签的路径,如Shipped、Received、Ready to Shipper节点标签。我想知道某个路径是否多次出现节点标签。它们可能不正常 (Shipped)-[:NEXT]->()-[:NEXT]->()-[:NEXT]-(:ReadyToShip)-[:NEXT]-()-[:NEXT]-(:ReadyToShip)-[:NEXT]-(:Received) 我有很多路径,但我想找到所有出现了两个或更多ReadyShip节点标签的路径,如上面的一个。我该怎么做?
(Shipped)-[:NEXT]->()-[:NEXT]->()-[:NEXT]-(:ReadyToShip)-[:NEXT]-()-[:NEXT]-(:ReadyToShip)-[:NEXT]-(:Received)
我有很多路径,但我想找到所有出现了两个或更多ReadyShip节点标签的路径,如上面的一个。我该怎么做?我可以使用以下方法提取2种类型节点之间的所有可能路径:
match path=(s:Shipped)-[:NEXT*]->(m:Received) return distinct extract(p in nodes(path) | labels(p))
但我得把它提取出来,自己过滤。我怎样才能在Cypher中做到这一点 [更新]
此查询应返回至少有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;
是的,我使用了一个类似的查询,但是如果我不知道ReadyShip节点重复了多少次呢?查询应该找到至少有2个
ReadyShip
节点的所有路径。这很有帮助。是否也有方法计算ReadyToShip节点的数量?对于路径1中的2个节点,与路径2中的3个节点相比。您是否安装了APOC程序,或者能够安装APOC程序?这里有一些在集合中查找多次出现的值的功能,这些功能可能会有所帮助。@InverseFalcon:是的,我确实安装了apoc过程。@InverseFalcon我尝试了apoc.coll.instances,并获得了一些结果。你知道我是否可以使用多个值作为第二个参数吗?很遗憾,你不能。您可能希望查看apoc.coll.duplicatesWithCount()
,并只过滤到感兴趣的值