具有停止条件的 Neo4j 树结构
Neo4j Tree structure with stop condition
我有 Neo4j 版本 3.0.4,里面有基于树的数据,我正在尝试为以下问题找到解决方案:
我想从根开始,向下移动收集所有节点。当我找到 (属性) "female" 类型的节点时,我想将它包含在结果中并停止下降。
Here is my try to describe the problem and expected result
备注:
- 节点之间存在称为 "relation" 的关系。每个节点都有
只有 1 个父级,所以它是树结构。
到目前为止我有:
match p=(root:User {isRoot:true})-[:RELATION*..]-(child:User) return p
其中return树形结构但没有停止条件
怎样才能达到这个效果?
更新 1:
也许描述期望结果的更好方法是 - 我希望树中的每个节点都深入并从根(或特定节点)开始,没有女性类型的直接或间接父节点。这有意义吗?
[已编辑]
这对你有用吗?
MATCH p=(root:User {isRoot:true})-[:RELATION*0..]-(:User {type: 'male'})-[:RELATION]-(:User {type: 'female'})
RETURN p;
此查询应该 return 所有从根节点开始到女性节点结束的路径,但不经过任何其他女性节点。我假设非女性节点具有 "male" 作为 type
值。可变长度关系模式指定 0..
以便由女性根节点组成的路径也可以 returned。
你真的有两个选择。简单的方法是按照 InverseFalcon 的建议去做并获得所有结果,然后使用谓词 p运行e:
MATCH (root:User {isRoot: true})
WITH root
MATCH p = (root) - [:RELATION*] -> (:User {type: 'female'} )
WHERE ALL(x IN NODES(p)[1..-1] WHERE x.type = 'male')
RETURN NODES(p)
更难但更好的方法是重构数据模型,而不是通用的 -[:RELATION]->
,您有计划查询的特定关系类型(例如 :DAUGHTER|:SON
)。查询 neo4j 中的关系比节点标签或尤其是节点属性快得多,因此请设计您的关系以适应您要执行的分析。
我有 Neo4j 版本 3.0.4,里面有基于树的数据,我正在尝试为以下问题找到解决方案:
我想从根开始,向下移动收集所有节点。当我找到 (属性) "female" 类型的节点时,我想将它包含在结果中并停止下降。
Here is my try to describe the problem and expected result
备注:
- 节点之间存在称为 "relation" 的关系。每个节点都有 只有 1 个父级,所以它是树结构。
到目前为止我有:
match p=(root:User {isRoot:true})-[:RELATION*..]-(child:User) return p
其中return树形结构但没有停止条件
怎样才能达到这个效果?
更新 1: 也许描述期望结果的更好方法是 - 我希望树中的每个节点都深入并从根(或特定节点)开始,没有女性类型的直接或间接父节点。这有意义吗?
[已编辑]
这对你有用吗?
MATCH p=(root:User {isRoot:true})-[:RELATION*0..]-(:User {type: 'male'})-[:RELATION]-(:User {type: 'female'})
RETURN p;
此查询应该 return 所有从根节点开始到女性节点结束的路径,但不经过任何其他女性节点。我假设非女性节点具有 "male" 作为 type
值。可变长度关系模式指定 0..
以便由女性根节点组成的路径也可以 returned。
你真的有两个选择。简单的方法是按照 InverseFalcon 的建议去做并获得所有结果,然后使用谓词 p运行e:
MATCH (root:User {isRoot: true})
WITH root
MATCH p = (root) - [:RELATION*] -> (:User {type: 'female'} )
WHERE ALL(x IN NODES(p)[1..-1] WHERE x.type = 'male')
RETURN NODES(p)
更难但更好的方法是重构数据模型,而不是通用的 -[:RELATION]->
,您有计划查询的特定关系类型(例如 :DAUGHTER|:SON
)。查询 neo4j 中的关系比节点标签或尤其是节点属性快得多,因此请设计您的关系以适应您要执行的分析。