所以我试图找到我选择的节点和属性之间的所有节点,名为Stop:true。注意:我希望它包含停止节点。
所以如果我有一组这样的节点:
(id:1,Stop:false)-(id:2,Stop:false)-(id:3,Stop:false)-(id:4,Stop:false)-
(id:5,Stop:false)-(id:6,Stop:True)-(id:7,Stop:false)-(id:8,Stop:false)
它会回来 (ID:1,停止:假) - (ID:2,停止:假) - (ID:3,停止:假) - (ID:4,停止:假) - (ID:5,停止:假) - (ID:6,停止:真)
到目前为止我已经
了MATCH p=(a:Node{id:1})-[*]-(b:Node)
WHERE NOT b.Stop = true
RETURN p
但是此查询仍会返回连接到停止节点的节点。如何让它显示直到停止节点的所有节点?
答案 0 :(得分:1)
以下查询应返回从您选择的节点到Stop节点的每条路径(即,Stop
值为true
的节点。如果您的数据库具有多个Stop节点的路径,则此查询将返回每个Stop节点的路径(这意味着某些返回的路径可能包含多个Stop节点)。
MATCH p=(a:Node{id:6})-[*]-(b:Node {Stop: true})
RETURN p;
但是,如果您只想要具有单个Stop节点的路径(在末尾),那么此查询应该有效:
MATCH p=(a:Node{id:6})-[*]-(b:Node {Stop: true})
WHERE NONE(n IN NODES(p)[1..-1] WHERE n.Stop)
RETURN p;
[注]
可变长度路径模式(如()-[*]-()
)具有指数时间和空间复杂度。如果节点的平均度数是X,则遍历可变长度路径到深度Y会产生O(X ^ Y)的复杂度。您通常需要在可变长度模式(例如,()-[*..5]-()
)上指定合理的上限,以避免内存不足或查询似乎永远运行。您指定的上限取决于查询的性质和实际数据特征。