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