Recursion Neo4j-递归模式匹配和返回特定叶节点的递归路径
我有一个结构,其中一个节点要么“引导”到另一个节点,要么“着色”。“Colored_in”关系和颜色只是简化的附加信息 现在,我想为每个叶节点提供有关父节点的所有信息“Leads_to”,以及它们在“Colored_in”关系上的附加信息。 为了简化这一点,我将给出我想要的一个小样本:Recursion Neo4j-递归模式匹配和返回特定叶节点的递归路径,recursion,neo4j,cypher,Recursion,Neo4j,Cypher,我有一个结构,其中一个节点要么“引导”到另一个节点,要么“着色”。“Colored_in”关系和颜色只是简化的附加信息 现在,我想为每个叶节点提供有关父节点的所有信息“Leads_to”,以及它们在“Colored_in”关系上的附加信息。 为了简化这一点,我将给出我想要的一个小样本: CREATE (A:Key {name:'a'}), (B:Key {name:'b'}), (C:Key {name:'c'}), (D:Key {name:'d'}), (Black:Color {color
CREATE (A:Key {name:'a'}),
(B:Key {name:'b'}),
(C:Key {name:'c'}),
(D:Key {name:'d'}),
(Black:Color {color:'black'}),
(Blue:Color {color:'blue'}),
(A)-[:Leads_to]->(B),
(A)-[:Leads_to]->(C),
(B)-[:Leads_to]->(D),
(A)-[:Colored_in]->(Black),
(B)-[:Colored_in]->(Blue),
(C)-[:Colored_in]->(Blue),
(D)-[:Colored_in]->(Black)
此代码将创建以下结构:
A-->Black
/ \
/ \
Blue<--B C-->Blue
/
/
Black<--D
此外,一种颜色既不能“引导”到某事物,也不能“着色”到某事物。这只是一个例子,实际路径可能更长。此外,嵌套结果不必采用上述格式,父对象只需彼此明确分开(例如:“;”),并且顺序正确即可
编辑:
也许这会有所帮助,因为不需要来自其他关系的所有潜在信息,而只需要来自一个关系(在本例中为“Colored_in”),并且名称是固定的,属性是已知的。那么可能是这样的吗
MATCH path = (leaf:Key)-[:Leads_to*]->(end)
WHERE NOT ()-[:Leads_to]->(leaf) AND NOT (end)-[:Leads_to]->()
RETURN [node in nodes(path) | node {.name, color: [(node)-[:Colored_in]->(colorNode) | colorNode.color][0]}] as result
这将使用列表理解、贴图投影和模式理解,因此,对于每个匹配路径中的每个节点,它将输出节点名称的自定义贴图以及节点的附加颜色:颜色节点
结果:
╒══════════════════════════════════════════════════════════════════════╕
│"result" │
╞══════════════════════════════════════════════════════════════════════╡
│[{"name":"a","color":"black"},{"name":"b","color":"blue"},{"name":"d",│
│"color":"black"}] │
├──────────────────────────────────────────────────────────────────────┤
│[{"name":"a","color":"black"},{"name":"c","color":"blue"}] │
└──────────────────────────────────────────────────────────────────────┘
非常感谢你,你的回答完美地回答了我的问题,甚至比我希望的更一般,但那更好,因为我现在更了解cypher。
╒══════════════════════════════════════════════════════════════════════╕
│"result" │
╞══════════════════════════════════════════════════════════════════════╡
│[{"name":"a","color":"black"},{"name":"b","color":"blue"},{"name":"d",│
│"color":"black"}] │
├──────────────────────────────────────────────────────────────────────┤
│[{"name":"a","color":"black"},{"name":"c","color":"blue"}] │
└──────────────────────────────────────────────────────────────────────┘