Cypher:如何使用数组参数找到变量路径中的最后一个节点?

时间:2014-04-08 08:05:45

标签: neo4j cypher

我有以下图表结构:

标签: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号房间)将它连接到.. 我需要找到满足所有条件的(可变长度)路径

1 个答案:

答案 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/