关于Neo4j属性的关系

时间:2013-10-14 11:52:13

标签: neo4j cypher graph-databases

假设我有两个节点“体温”和“发烧”,它们之间的关系名称为“cause”,属性为“degree Celsius”的值为“102.0”。现在我要做的是编写一个密码查询,其中如果有属性值> 102.0在MATCH子句中,它必须检索发烧节点否则不会。

我不知道除了创建这样的结构之外如何编写这样的查询。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:6)

您可以在WHERE子句中过滤关系属性,就像节点属性一样。只需确保将关系绑定到MATCH子句中的标识符即可。我不明白你的模型(温度是因果关系的属性吗?)但你可以尝试像

这样的东西
MATCH (body_temperature) <-[r:CAUSES]- (fever)
WHERE r.degreeCelsius > 102

这就是你要找的东西吗?

修改

要使CREATE子句依赖于某些条件,您可以将条件声明为仅匹配您想要创建某些内容的情况的模式,然后继续创建。只需确保在STARTMATCHWHERE子句中绑定要在CREATE子句中使用的不同节点或关系。有时您可能必须使用WITH将结果带到查询的新部分,但对于您的情况,请先尝试类似

的内容
START bodyTemp = node:MyIndex(name="Body Temperature"), fever = node:MyIndex(name="Fever")
WHERE HAS(bodyTemp.degreeCelsius) AND bodyTemp.degreeCelsius > 102.0
CREATE bodyTemp -[:CAUSES]-> FEVER

答案 1 :(得分:2)

假设“摄氏度”是关系“CAUSES”的属性,可以使用“where”子句指定属性值约束,如下所示,

Match t:BodyTemperature-[r:CAUSES]->f:Fever
Where r.degreeCelsius > 102.0
Return f