很抱歉,如果问题看起来很模糊:)我正在寻找的查询有点具体。考虑图中的以下分支:
(a:Detector {prop_x:False}) - >(b:Category {prop_x:False}) - >(c:Category {prop_x:True}) - >(d:Category { prop_x:True}) - >(...)等等
现在我希望得到a
的所有父节点,直到我到达一个节点的属性prop_x
为True然后停止的节点。即我想要路径:
(a:探测器{prop_x:False}) - >(b:类别{prop_x:False}) - >(c:类别{prop_x:True})
我尝试了以下查询:
match path=(child:Detector)-[*]->(parent:Category {prop_x:True}) return path
但我获得的路径还包括节点(d:Category),因为它也有prop_x
True。
我希望图表中的所有此类路径都以 Detector
节点开头,直到第一个“父” Category
节点< / strong> prop_x
是
答案 0 :(得分:1)
您在那里的表达式将匹配以标签为Label
的节点开头的所有路径,并以标签为Label
且prop_x
为true
的节点结束}。我假设你知道你要从哪里开始,并开始使用name
A
的节点。然后将那里的所有路径与prop_x
true
的{{1}}进行匹配。这可能包括true - false - true
的路径。我按照路径长度对结果路径进行了排序,并仅保留了最高匹配。
match path=(child:Node {name: 'A'})-[*]->(parent:Node {prop_x:True})
return length(path), nodes(path)
order by length(path)
limit 1
NEW NEW
每个更新的问题更新,“如何从所有Detector Nodes
找到所有此类路径?”
我想了一会儿,这就是我想出来的......
// first match all of your detector nodes
match (d:Detector)
with d
// then for each detector node match the paths that end with True
match path=d-[*]->(parent:Category {prop_x:True})
// for each detector collect the length and matching nodes
with d, [ length(path), nodes(path) ] as path_match
// order by the detector name and path length so they are grouped and sorted
order by d.name, length(path)
// then collect all of the length, path collections so there is one
// row per detector
with d, collect(path_match) as path_matches
// then return the first Detector and the first (i.e. shortest) collection in the collection of paths
return d.name, path_matches[0]