【问题标题】:Neo4j Cypher Query to get all sub nodes until reaching a node with a specific relationshipNeo4j Cypher 查询以获取所有子节点,直到到达具有特定关系的节点
【发布时间】:2016-09-30 18:38:08
【问题描述】:

我正在尝试创建一个以称为“分析单位”的蓝色节点开头的查询。查询将获取所有子节点,除非它遇到一个节点,该节点通过直接附加到不同的分析单元来“覆盖”关系。任何帮助将不胜感激!

【问题讨论】:

  • 你能扩展一下吗?如,给定您链接到的图表,引导我们完成您期望正确查询执行的操作以及预期的输出。
  • 旁白:您似乎拥有方向相反但始终存在于相同节点之间的关系类型。 Neo4j 中不需要这种冗余,因为您可以轻松地在任一方向导航关系。
  • @InverseFalcon 当然,所以可以说我使用“美国银行”的起始节点进行查询......蓝色节点之一......我想让所有连接到它的东西都装在盒子里红色的。这个想法是,它下面的所有东西都将“继承”“分析上的一部分”关系,除非它遇到一个明确定义与其他地方的关系的节点。我不确定为每个节点提供明确的关系是否是最佳实践。
  • @cybersam 感谢这个提示,我将删除冗余。
  • 你只关心红色节点作为“子节点”吗?绿色节点“Barnett Bank”和“Bank South”似乎有资格作为任一蓝色节点的“子节点”,具体取决于您从哪个蓝色节点开始遍历。

标签: graph neo4j cypher


【解决方案1】:

这个查询对你有用吗?

它应该返回每个 Blue 节点(具有到任何 Red 节点的路径)及其“子节点”(沿着每个路径),忽略任何子节点所在的路径(除了第一个) 有一个传入的ANALYTICALLY_COMPOSED 关系:

MATCH (a:Blue)-[:ANALYTICALLY_COMPOSED]->(b)
MATCH p=(b)-[rels*]-(:Red)
WITH a, NODES(p) AS subnodes
WHERE NONE(n IN subnodes[1..] WHERE ()-[:ANALYTICALLY_COMPOSED]->(n)) 
RETURN a, subnodes;

【讨论】:

  • 是的,成功了!非常感谢! ...只需过滤到“a.name = “Bank of America” 到红色出现的位置,因为它来自另一条路径。
猜你喜欢
  • 1970-01-01
  • 2023-01-22
  • 2014-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多