从LENGTH(r)获取节点

时间:2015-06-06 21:02:16

标签: neo4j cypher

此代码

MATCH (n { name: 'Create node' })<-[r*]-(s { name: ';' }) 
WITH n,s, LENGTH(r) AS depth 
RETURN n,s, depth

将返回enter image description here第一个和最后一个节点之间的关系数。是否有可能获得这些关系之间的节点?

奖金问题:是否有可能让它们按顺序排列?

http://console.neo4j.org/r/z1iafh

(此代码在控制台中不起作用,仅在localhost。查询以创建节点

create 
(_0  {name:"CREATE"}),
(_1  {name:"("}),
(_2  {name:"node_name"}),
(_3  {name:")"}),
(_4  {name:";"}),
_1-[:CREATE_NODE_COMMAND]->_0,
_2-[:CREATE_NODE_COMMAND]->_1,
_3-[:CREATE_NODE_COMMAND]->_2,
_4-[:CREATE_NODE_COMMAND]->_3
)

1 个答案:

答案 0 :(得分:1)

您可以扩充匹配语句以匹配从 n s 的整个路径,然后您可以使用路径上的nodes函数返回按顺序收集节点(从n到s)。如果您只想要起始节点和结束节点之间的节点,则可以将集合从第二个返回到第二个节点。

MATCH p=(n { name: 'Create node' })<-[r*]-(s { name: ';' }) 
WITH n,s, size(r) as depth, length(p) as depth2, nodes(p) as nodes 
RETURN n,s, depth, depth2, nodes[1..length(nodes)-1]

size()可用于返回集合中元素的数量,而length()仅应用于返回路径或字符串的长度。它在其他对象(集合和模式)上的使用在将来的neo4j版本中可能会被弃用;目前支持向后兼容性。