Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Recursion Neo4j-递归模式匹配和返回特定叶节点的递归路径_Recursion_Neo4j_Cypher - Fatal编程技术网

Recursion Neo4j-递归模式匹配和返回特定叶节点的递归路径

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

我有一个结构,其中一个节点要么“引导”到另一个节点,要么“着色”。“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:'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"}]            │
└──────────────────────────────────────────────────────────────────────┘