我有以下图表结构:
标签:Building,BuildingHier
BuildingHier可以是例如房间或楼层。 (但它的变量)。
关系: (h:BuildingHier({key: 'floor', value: 3})-[:PART_OF]->(b:Building({id: 'myid'})
(h1:BuildingHier({key: 'room', value: 40})-[:PART_OF]->(h2:BuildingHier({key: 'floor', value: 3})
假设我有一个我要连接的新节点的标签数组[{key: 'room', value: 49},{key: 'floor', value: '3'}]
。如何找到路径中的最后一个节点(房间节点)?
层次结构是动态的,楼层和房间只是示例,可以有其他层次结构,例如wing。
编辑: 建筑物,地板和房间相连。我想将一个新节点连接到相关的房间,例如带有标签数组的资产,如示例所示。我想在图表中找到正确路径中的最后一个节点(49号房间)(建筑物 - > 3楼 - > 49号房间)将它连接到.. 我需要找到满足所有条件的(可变长度)路径
答案 0 :(得分:1)
我不确定我是否获得了域名模型,您是否可以添加一些伪代码,甚至更好的是您到目前为止尝试过的内容?
我想在图表中找到正确路径中的最后一个节点(49号房间)(建筑物 - > 3楼 - >> 49号房间)将其连接到
为什么不只是查询它?为什么“路径中的最后一个节点”?
MATCH (room:BuildingHier { key:"room",value:49 })-[:PART_OF]->(floor:BuildingHier { key:"floor",value:3 })-[:PART_OF]-(building:Building { id:"1" }) return room,floor,building;
然后您可以添加多个MERGE / CREATE命令
MERGE (someotherpart:BuldingHier { key:"someptherparts",value:121 })-[:PART_OF]-(room)
如果您没有要查询的键/值,但想要在给定已知分支及其关系的情况下搜索给定深度,则可以执行类似
的操作MATCH (something)-[r:PART_OF*1..2]->(building:Building)
RETURN building,something;
要获取该链中的最后一个值,您可以使用
MATCH (something)-[r:PART_OF*1..2]->(building:Building)
RETURN last(collect(something.value));
或者是如何提取标记键/值并将其作为参数添加到cypher命令的问题?你正在使用什么语言/驱动程序。
Cypher参考卡是你最好的朋友=) http://docs.neo4j.org/refcard/2.0/