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
Neo4j Cypher-返回相同类型的节点及其嵌套节点_Neo4j_Nested_Cypher - Fatal编程技术网

Neo4j Cypher-返回相同类型的节点及其嵌套节点

Neo4j Cypher-返回相同类型的节点及其嵌套节点,neo4j,nested,cypher,Neo4j,Nested,Cypher,我希望能够返回项节点列表,其中嵌套的项节点列表包含在框中。因为项节点与其嵌套的项节点之间的关系可能不同(例如轮子,窗口,灯),我想编写一个查询,跳过关系并返回任何嵌套的项节点及其项子节点,因为项将至少有一个项子节点或无子节点(从而导致子列表为空) 我希望只需传递一个框标识符(例如boxID)即可完成此操作 注意:我是Neo4j和Cypher的新手,因此请(相当)详细地回答查询的工作原理。我想了解它是如何工作的。谢谢 例如 COLLECT(…)部分把我弄糊涂了。如何返回项节点及其所有项子节点和所

我希望能够返回
节点列表,其中嵌套的
节点列表包含在
中。因为
节点与其嵌套的
节点之间的关系可能不同(例如
轮子
窗口
),我想编写一个查询,跳过关系并返回任何嵌套的
节点及其
子节点,因为
将至少有一个
子节点或无子节点(从而导致子列表为空)

我希望只需传递一个
标识符(例如
boxID
)即可完成此操作

注意:我是Neo4j和Cypher的新手,因此请(相当)详细地回答查询的工作原理。我想了解它是如何工作的。谢谢

例如

COLLECT(…)
部分把我弄糊涂了。如何返回
节点及其所有
子节点和所有子节点
子节点,依此类推,直到子节点为空?是否有更好的方法来匹配所有节点?

使用模式非常容易:

由于可变长度关系结果可以多次返回同一项,因此需要
DISTINCT
选项

此查询还确认关系图中显示的关系方向性。
包含
关系模式指定了适当的方向性,但可变长度关系(
-[*]-
)不指定方向性,因为数据模型在从
项实例开始的整个树中没有使用一致的方向

警告:无限可变长度关系可能需要很长时间,甚至会耗尽内存,具体取决于数据库的大小以及每个节点有多少关系。这可以通过指定长度的合理上限来解决

MATCH (iA: Item)-[r]->(iB: Item)-[r]->(b: Box) 
WHERE b.boxID = $boxID
RETURN COLLECT(iB.itemID AS ItemID, ib.name as ItemName, COLLECT(iA.itemID as ItemID, iA.name as ItemName, COLLECT(...) ) AS ItemChildren)
MATCH (b:Box)-[:CONTAINS]->(:ItemInstance)-[*]-(i:Item)
WHERE b.boxID = $boxID
RETURN COLLECT(DISTINCT i) AS ItemChildren