如何建立条件关系?
How to create conditional relationships?
我有一个系统是运行某个组织实现的某个功能,所以我有关系:
Organization → Function → System
但有时功能仍然未知,在这种情况下我想将系统直接绑定到组织:
Organization → System
这种东西怎么写?
系统包含用于创建这些关系的属性,例如
create (s:System {id: 'x', Organization: 'MST', Function: 'CM'})
或
create (s:System {id: 'x', Organization: 'MST'})
这意味着我可以找到这样的节点:
match (s:System), (o:Organization {Code: s.Organization})
optional match (f:Function {Code: s.Function})
...但是如何创建关系?
因为您总是有 System
个节点,您可以重新安排您的数据模型,使其看起来像这样
(:Org {Code: 1})-[:HAS_SYSTEM]->(:System {id: 2})-[:HAS_FUNCTION]->(:Function {Code: 3})
HAS_FUNCTION
关系和 Function
节点是可选的。
因此,如果您想查找具有功能代码 3 的组织代码 1 的系统,您可以这样做:
MATCH (:Org {Code: 1})-[:HAS_SYSTEM]->(s:System)-[:HAS_FUNCTION]->(:Function {Code: 3})
RETURN s;
我找到了 Mark Needham 的 post:
http://www.markhneedham.com/blog/2014/06/17/neo4j-load-csv-handling-conditionals/
...它提供了一种折磨人的语法,但提供了一种解决方案。有没有更好的方法来完成这个?
match (s:System), (o:Organization {Code: s.Organization})
optional match (d:Function {Code: s.Function})
foreach (n in (case when s.Function is null then [1] else [] end) |
create (o)-[:Runs]->(s)
)
foreach (n in (case when s.Function is not null then [1] else [] end) |
create (o)-[:Function]->(f)-[:SupportedBy]->(s)
);
我有一个系统是运行某个组织实现的某个功能,所以我有关系:
Organization → Function → System
但有时功能仍然未知,在这种情况下我想将系统直接绑定到组织:
Organization → System
这种东西怎么写?
系统包含用于创建这些关系的属性,例如
create (s:System {id: 'x', Organization: 'MST', Function: 'CM'})
或
create (s:System {id: 'x', Organization: 'MST'})
这意味着我可以找到这样的节点:
match (s:System), (o:Organization {Code: s.Organization})
optional match (f:Function {Code: s.Function})
...但是如何创建关系?
因为您总是有 System
个节点,您可以重新安排您的数据模型,使其看起来像这样
(:Org {Code: 1})-[:HAS_SYSTEM]->(:System {id: 2})-[:HAS_FUNCTION]->(:Function {Code: 3})
HAS_FUNCTION
关系和 Function
节点是可选的。
因此,如果您想查找具有功能代码 3 的组织代码 1 的系统,您可以这样做:
MATCH (:Org {Code: 1})-[:HAS_SYSTEM]->(s:System)-[:HAS_FUNCTION]->(:Function {Code: 3})
RETURN s;
我找到了 Mark Needham 的 post:
http://www.markhneedham.com/blog/2014/06/17/neo4j-load-csv-handling-conditionals/
...它提供了一种折磨人的语法,但提供了一种解决方案。有没有更好的方法来完成这个?
match (s:System), (o:Organization {Code: s.Organization})
optional match (d:Function {Code: s.Function})
foreach (n in (case when s.Function is null then [1] else [] end) |
create (o)-[:Runs]->(s)
)
foreach (n in (case when s.Function is not null then [1] else [] end) |
create (o)-[:Function]->(f)-[:SupportedBy]->(s)
);