此代码
MATCH (n { name: 'Create node' })<-[r*]-(s { name: ';' })
WITH n,s, LENGTH(r) AS depth
RETURN n,s, depth
将返回第一个和最后一个节点之间的关系数。是否有可能获得这些关系之间的节点?
奖金问题:是否有可能让它们按顺序排列?
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
)
答案 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版本中可能会被弃用;目前支持向后兼容性。