我正在neo4j数据库中处理物料清单(bom)和零件数据。
我的图表中有三种类型的节点:
-
(ItemUsageInstance)
这些是物料清单树的元素
-
(Item)
一个存在于BOM树上的每个唯一项目
-
(Material)
这些关系是:
-
(ItemUsageInstance)-[CHILD_OF]->(ItemUsageInstance)
-
(ItemUsageInstance)-[INSTANCE_OF]->(Item)
-
(Item)-[MADE_FROM]->(Material)
图示如下:
这是数据的简化图。(重新定位节点以增强可见性的关系图):
我想做的是找到相邻的子树
ItemUsageInstance
是谁的
Items
都是用同样的材料做的
Material
s公司
到目前为止,我的疑问是:
MATCH (m:Material)
WITH m AS m
MATCH (m)<-[:MADE_FROM]-(i1:Item)<-[]-(iui1:ItemUsageInstance)-[:CHILD_OF]->(iui2:ItemUsageInstance)-[]->(i2:Item)-[:MADE_FROM]->(m) RETURN iui1, i1, iui2, i2, m
但是,这只返回一个这样的子树,即图中间的相邻节点
材料
“M0002”此外,结果行是单独的条目,子树中的每个父子对对应一个条目:
ââââââââââââââââââââââââââââ¤âââââââââââââââââââââââ¤âââââââââââââââââââââââââââ¤âââââââââââââââââââââââ¤ââââââââââââââââââââââââ
â"iui1" â"i1" â"iui2" â"i2" â"m" â
ââââââââââââââââââââââââââââªâââââââââââââââââââââââªâââââââââââââââââââââââââââªâââââââââââââââââââââââªââââââââââââââââââââââââ¡
â{"instance_id":"inst5002"}â{"part_number":"p003"}â{"instance_id":"inst7003"}â{"part_number":"p004"}â{"material_id":"M0002"}â
ââââââââââââââââââââââââââââ¼âââââââââââââââââââââââ¼âââââââââââââââââââââââââââ¼âââââââââââââââââââââââ¼ââââââââââââââââââââââââ¤
â{"instance_id":"inst7002"}â{"part_number":"p003"}â{"instance_id":"inst7003"}â{"part_number":"p004"}â{"material_id":"M0002"}â
ââââââââââââââââââââââââââââ¼âââââââââââââââââââââââ¼âââââââââââââââââââââââââââ¼âââââââââââââââââââââââ¼ââââââââââââââââââââââââ¤
â{"instance_id":"inst7001"}â{"part_number":"p002"}â{"instance_id":"inst7002"}â{"part_number":"p003"}â{"material_id":"M0002"}â
ââââââââââââââââââââââââââââ´âââââââââââââââââââââââ´âââââââââââââââââââââââââââ´âââââââââââââââââââââââ´ââââââââââââââââââââââââ
我期待着第二个子树,它碰巧也是一个链表,被包括在内。第二个子树由
ItemUsageInstances
在图的最右边的STIM7000、STIM7000、STIM7000。值得一提的是,这些相邻的实例不仅是由同一个
材料
,它们都是相同的实例
Item
.
我确认
项目使用说明
节点具有
[INSTANCE_OF]
与
项目
节点:
MATCH (iui:ItemUsageInstance) WHERE NOT (iui)-[:INSTANCE_OF]->(:Item) RETURN iui
(返回0条记录)。
也证实了
项目
节点具有
[MADE_FROM]
与A的关系
材料
节点:
MATCH (i:Item) WHERE NOT (i)-[:MADE_FROM]->(:Material) RETURN i
(返回0条记录)。
证实了
inst7008
是唯一的
项目使用说明
没有外向的
[CHILD_OF]
关系。
MATCH (iui:ItemUsageInstance) WHERE NOT (iui)-[:CHILD_OF]->(:ItemUsageInstance) RETURN iui
(返回1条记录:
{"instance_id":"inst7008"}
)
inst5000
和
inst7001
是唯一的
项目用途说明
没有输入
[孩子的]
关系
MATCH (iui:ItemUsageInstance) WHERE NOT (iui)<-[:CHILD_OF]-(:ItemUsageInstance) RETURN iui
(返回2条记录:
{"instance_id":"inst7001"}
和
{"instance_id":"inst5000"}
)
我想收集/聚合结果,以便每一行都是子树我看到了
this example
如何
collect()
让数组方法起作用。但它仍然有复制品
项目使用说明
在里面。(此处讨论的“项目图”完全失败…)
关于为什么我的查询只查找具有相同材质的相邻项使用实例的一个子树,有何见解?
按子树汇总结果的最佳方法是什么?