neo4j v.2(cypher)中的条件关系建模

neo4j v.2(cypher)中的条件关系建模,neo4j,conditional,cypher,relationships,Neo4j,Conditional,Cypher,Relationships,我有两个相关的问题需要帮助 问题1:如何为条件关系建模? 我希望我的数据表明,当测试CLT1的“Result”property=“High”时,CLT1与疾病A有关系。如果我采取以节点为中心的方法,我想象代码可能看起来像 (CLT 1 {Result: "High"}) -[:INDICATES] -> (Disease A) 此外,当CLT1的“结果”属性为“低”时,CLT1与疾病B有关系 (CLT 1 {Result: "Low"}) -[:INDICATES] -> (

我有两个相关的问题需要帮助

问题1:如何为条件关系建模? 我希望我的数据表明,当测试CLT1的“Result”property=“High”时,CLT1与疾病A有关系。如果我采取以节点为中心的方法,我想象代码可能看起来像

(CLT 1 {Result: "High"})  -[:INDICATES] -> (Disease A)
此外,当CLT1的“结果”属性为“低”时,CLT1与疾病B有关系

(CLT 1 {Result: "Low"})  -[:INDICATES] ->  (Disease B)
或者,如果我采取以关系为中心的方法,代码可能如下所示

(CLT 1) -[:INDICATES {Result: "High"}] -> (Disease A)
(CLT 1) -[:INDICATES {Result: "Low"} ] -> (Disease B)
问题2

我有过这样的经验:我正在为数据建模,有一个节点具有唯一的名称,但标签或属性不同。问题是我希望这些节点是可区分的。然而,它们在cypher看来并不相同

我可以给它们多个属性、标签或不同的名称。多样性必须针对每个不同的类别。。。在标签或特性中(1+n标签、特性)或以不同的名称

问题2与问题1相关,因为我无法对条件关系建模,也无法通过标签或属性区分同一节点(CLT1)。我可能必须通过在关系中设置可查询的“条件”来解决它


我有这个权利吗?我还有其他选择吗?

对于你的第一个问题,我会采用以关系为中心的方法,因为这种方法代表了从结果节点到疾病的信息推断

在建模和查询方面也应该工作得很好

关于你的第二个问题。这就是节点标签的含义,它们表示节点可以扮演的不同角色,每个角色都具有不同的相关属性和关系


因此,您可以进行
MATCH(p:Person{name:“Jose”})
并将其与
MATCH(d:Developer{name:“Jose”})
区别对待。也就是说,看看其他道具和rel。

嘿,迈克尔,谢谢你回来。好的,但第二个问题是CLT1有标签A和属性B。然而,另一种类型的CLT1有标签B和属性C。它们都是CLT1,但如果我尝试用相同的名称定义它们,Neo4j/cypher说它已经根据名称定义了。似乎我只能根据名称而不是标签或属性来区分节点。因此,可以将名称与属性或标签结合起来,或者给出多个属性和/或标签。迈克尔,考虑到你的回答,我认为我有一个根本性的误解。我认为节点的名称通常位于create语句之后……(create(Hugo:Person{name:'Hugo Weaving',born:1960}))。从你的回答中我想到的是,我可以先贴上相关的标签,然后将名称作为属性保留。电影中使用“雨果”这一事实并不一定是最佳实践。如果不包括名称,则具有更大的灵活性。我说对了吗?何塞:现在你说对了。您在Cyber中为节点指定的名称只是一个变量名,没有其他含义